트리 (Tree)
- 최초 작성일: 2023년 5월 2일(화)
목차
[TOC]
내용
개념
계층적 구조를 갖는 데이터를 표현하기 위한 자료구조
- 노드(Node): 데이터를 표현
- 간선(Edge): 노드의 계층 구조를 표현하기 위해 사용
트리의 예시
실습 1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tree
{
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 = "캐릭터" });
root.Children.Add(node);
}
}
return root;
}
static void Main(string[] args)
{
TreeNode<string> root = MakeTree();
}
}
}
결과 1
실습 2
트리를 전부 출력하는 코드를 작성해보자.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tree
{
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 = "캐릭터" });
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 void Main(string[] args)
{
TreeNode<string> root = MakeTree();
PrintTree(root);
}
}
}
결과 2
실습 3
이번에는 트리의 높이를 구해는 코드이다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tree
{
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 = "캐릭터" });
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;
//if (height < newHeight)
// height = newHeight;
height = Math.Max(height, newHeight);
}
return height;
}
static void Main(string[] args)
{
TreeNode<string> root = MakeTree();
//PrintTree(root);
Console.WriteLine(GetHeight(root));
}
}
}