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
'코딩공부 > 자료구조' 카테고리의 다른 글
[자료구조] 순열(Permutation)개념 구현 C# (0) | 2023.07.19 |
---|---|
[자료구조] 힙트리와 이진트리 개념 및 우선순위큐 구현 C# (0) | 2023.06.27 |
[자료구조] 그래프 순회와 다익스트라 최단 경로 알고리즘 C# (0) | 2023.06.26 |
[자료구조] 동적배열, 연결리스트 구현 및 시간복잡도 (0) | 2023.06.23 |
[자료구조] 그래프 순회와 BFS(너비 우선 탐색) C# (0) | 2023.06.22 |