본문 바로가기
Programming/자료구조

트리의 개념 Tree

by Bam_t 2021. 9. 19.
728x90

이번 포스트부터 몇개의 포스트에 걸쳐 이야기할 자료구조는 '트리(Tree)'입니다. 특히 이번 포스트에서는 트리의 개요에 대해서 따로 다루고 넘어가려고합니다. 그동안 다뤘던 자료구조랑은 또 다른 이해가 필요하기 때문이죠.


1. 트리 개요

트리(Tree) 나무와 스펠링이 같습니다. 보통 우리가 생각하는 나무는 어떻게 생겼죠? 아래는 넒고 위로 갈수록 좁아지는 형태를 갖고있습니다.

이처럼 트리도 위에서 아래로 갈수록 자료가 많아지는 구조를 가지고 있습니다.

가만보면 여태까지 배운 리스트나 큐, 스택, 데크를 보면 뭔가 통 느낌이 났는데 이건 통이라고 하기 애매한 부분이 있는 것 같다고 생각이 듭니다. 왜냐하면 트리는 계층 관계를 표현하는 자료구조이기 때문입니다.

 

 

2. 트리 이해하기

트리는 비선형, 1:1이 아닌 1:다수의 구조를 가진 자료입니다. 또 자료 사이에 층이 있는 계층적 자료구조입니다. 무슨 이야긴지 모르겠다면 조직도를 보면 이해가 되실겁니다.

제일 위에 CEO가 있고 그아래 여러 자회사가, 자회사 밑에 또 n개의 세부팀까지 이런식으로 구성되있는 것을 트리구조 라고합니다. 하나의 ceo아래 5개의 자료가있고 하위 오피스에 3개의 자료가 있습니다. 이렇게 1:다수의 균등하지 않은 비선형 구조입니다.

자 그럼 트리가 어떻게 생겼는지 보고 구성을 살펴보겠습니다.

 

 

 

3. 트리의 구성

트리에서 제일 먼저 눈에 띄는 것이 있는데. 동그라미와 선들 입니다. 동그라미는 구조에 저장된 자료입니다. 이 자료들을 '노드'라고 하고, 이 노드들을 잇고 있는 선을 '간선'이라고 합니다.


맨 위의 노드는 '루트'라고 합니다. 이 루트 노드가 트리의 시작입니다. 또한 레벨0이라고 하며, 이는 노드가 한 칸 씩 내려갈수록 레벨이 1증가합니다. 트리가 완성됐을때 레벨의 수를 가장 높은 레벨로 보고 그 숫자를 트리의 높이 라고합니다. (트리의 높이 == 트리의 레벨)


연결되어있는 노드에서 상위에 있는 노드를 부모 노드, 그 하위에 있는 노드를 자식 노드라고 합니다. 이때 자식 노드에서 같은 부모를 갖고 있는 노드 끼리는 형제 노드 라고 합니다.


어떤 한 노드에서 루트 노드 까지 가는 경로에 있는 노드들을 조상 노드라고 합니다.


한 노드의 하위 노드들은 따로 빠져나와서 다른 트리를 구성할 수 있습니다. 이처럼 구성할 수 있는 트리는 자식 노드 수 만큼이 되며 이 트리들을 서브 트리라고 합니다.

한 노드에서 서브 트리가 생기는 갯수를, 다시 말하자면 한 노드의 자식 노드 수를 차수라고 합니다. 예를 들어 위 트리의 루트 노드는 자식이 두개 이므로 차수는 2가 되고, 서브 트리의 자식 노드 수는 3이므로 차수는 3이 됩니다.

빨간펜으로 표시된 자식 노드가 없는(= 차수가 0인) 노드들은 단말 노드, 리프(leaf) 노드 라고 합니다. 이 외에 차수가 1 이상인 노드들은 내부 노드 라고 합니다.

트리에 이처럼 노드마다 다양한 차수를 가지고 있는데 이 중에서 제일 큰 차수가 트리의 차수가 됩니다. 위 그림에서 최고 차수는 3이므로 이 트리의 차수는 3이됩니다.


마지막으로 노드의 높이라는 개념이 있습니다. 노드의 높이는 루트 노드에서 해당 노드까지 간선의 갯수를 의미합니다.

추가적으로 트리 여러개의 집합을 포레스트라고 합니다.


출처

나무 사진

https://minecraft.fandom.com/ko/wiki/%EB%82%98%EB%AC%B4

 

나무

나무(Tree)는 원목과 잎 블록으로 구성된 구조물이다. 참나무, 가문비나무, 자작나무, 정글 나무, 아카시아나무, 짙은 참나무 등 6가지 종류가 있다. Minecraft에서 발견되는 나무 나무의 키는 매우

minecraft.fandom.com

 

조직도 사진

http://www.blessrain.com/%EB%AC%B4%EB%A3%8C-ppt-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%A1%B0%EC%A7%81%EB%8F%84/

 

무료 PPT 템플릿 조직도

 

www.blessrain.com

 

728x90

'Programming > 자료구조' 카테고리의 다른 글

이진 트리 구현  (0) 2021.09.24
이진 트리 Binary Tree  (0) 2021.09.20
데크 Deque  (0) 2021.09.18
원형 큐 Circular Queue  (0) 2021.09.17
큐 Queue  (0) 2021.09.16

댓글