코딩공부/자료구조
[자료구조] 트리개념 및 구현 C#
usingsystem
2023. 6. 27. 16:47
728x90
트리는 그래프와다르게 데이터가 동적으로 무수하게 바뀔 때 적합하다. 그렇기 때문에 실제 노드를 만들어 연결해주는 방식으로 사용된다.
트리는 재귀함수와 매우 밀접하다.
트리구현
class TreeNode<T>
{
public T Data { get; set; }
public List<TreeNode<T>> Children { get; set; } = new List<TreeNode<T>>();
}
class Program
{
static TreeNode<string> MakeTree()
{
TreeNode<string> root = new TreeNode<string>() { Data = "R1개발실" };
{
{
TreeNode<string> node = new TreeNode<string>() { Data = "디자인팀" };
node.Children.Add(new TreeNode<string>() { Data = "전투" });
node.Children.Add(new TreeNode<string>() { Data = "경제" });
node.Children.Add(new TreeNode<string>() { Data = "스토리" });
root.Children.Add(node);
}
{
TreeNode<string> node = new TreeNode<string>() { Data = "프로그래밍" };
node.Children.Add(new TreeNode<string>() { Data = "서버" });
node.Children.Add(new TreeNode<string>() { Data = "클라" });
node.Children.Add(new TreeNode<string>() { Data = "엔진" });
root.Children.Add(node);
}
{
TreeNode<string> node = new TreeNode<string>() { Data = "아트팀" };
node.Children.Add(new TreeNode<string>() { Data = "배경" });
node.Children.Add(new TreeNode<string>() { Data = "캐릭터" });
node.Children.Add(new TreeNode<string>() { Data = "스토리" });
root.Children.Add(node);
}
}
return root;
}
/// 모든 자식 출력
static void PrintTree(TreeNode<string> root)
{
//접근
Console.WriteLine(root.Data);
foreach (TreeNode<string> child in root.Children)
PrintTree(child);
}
/// 트리 높이 검색
static int GetHeight(TreeNode<string> root)
{
int height = 0;
foreach (TreeNode<string> child in root.Children)
{
int newHeight = GetHeight(child) + 1;
height = Math.Max(height, newHeight);
//if (height < newHeight)
// height = newHeight;
}
return height;
}
static void Main(string[] args)
{
TreeNode<string> root = MakeTree();
PrintTree(root);
Console.WriteLine(GetHeight(root));
}
}
728x90