Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 차이점
- 멀티쓰레드
- 벡터
- rookiss
- 스택영역
- 스택
- Queue
- 객체지향
- std::map
- list
- 트리
- 반복문
- 자료구조
- std::unordered_map
- c#
- 프래그멘테이션
- map
- vector
- 기술면접
- 인프런
- 해쉬맵
- 리스트
- MonoBehaviour
- 힙영역
- thread
- 알고리즘
- static_cast
- 공부
- 큐
- 배열
Archives
- Today
- Total
호빵의 IT 개발소
[C#] 트리 구현 연습 본문
이 예시를 프로그래밍 구현 연습을 하겠습니다.
- 트리구현
- 콘솔창으로 트리 출력
- 트리의 높이 구하기

1) 트리 구현
using System;
using System.Collections.Generic;
using System.Text;
namespace Exercise
{
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 = "개발실" }; //최상위 노드
{
{
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); //root에 연결
}
{
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();
}
}
}
2) 콘솔창으로 트리 출력
using System;
using System.Collections.Generic;
using System.Text;
namespace Exercise
{
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 = "개발실" }; //최상위 노드
{
{
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); //root에 연결
}
{
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);
}
}
}
출력

3) 트리의 높이 출력
using System;
using System.Collections.Generic;
using System.Text;
namespace Exercise
{
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 = "개발실" }; //최상위 노드
{
{
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); //root에 연결
}
{
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; //새로운 높이가 현재높이가 된다.
}
return height;
}
static void Main(string[] args)
{
TreeNode<string> root = MakeTree();
Console.WriteLine(GetHeight(root));
}
}
}
출력

---------------------------------------------------------------------------------------------------------------------------
참고 : [인프런] Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
'자료구조와 알고리즘 > 자료구조와 알고리즘 맛보기' 카테고리의 다른 글
| [C#] 우선순위 큐 (0) | 2022.01.15 |
|---|---|
| [C#] 이진 트리 (0) | 2022.01.15 |
| [C#] 트리 이론 (0) | 2022.01.15 |
| [C#] 다익스트라 최단 경로 알고리즘(추가 공부 필요) (0) | 2022.01.13 |
| [C#] BFS (너비 우선 탐색) (0) | 2022.01.13 |
Comments