개발자 끄적끄적

트리(Tree) 개념 본문

알고리즘 분석

트리(Tree) 개념

햏치 2023. 3. 4. 18:42

<트리(Tree)>
- 대량의 데이터를 관리하는 역할

- 비선형 구조 -> 모든 데이터가 하나의 선상에 존재하지 않는 구조, 하나의 노드에 연결된 노드들이 여러개이면서 대칭구조를 이룬다 
 *선형 구조-> 모든 데이터가 하나의 선상에 존재하는 구조

- 트리는 정점(node)과 간선(edge)으로 이루어진 그래프의 변형
  *트리(Tree)와 그래프(Graph)의 차이 
     1) 트리 : 그래프의 부분집합, 트리는 오직 하나의 부모노드(Parent Node)를 가질 수 있다 
     2) 그래프 : 하나 이상의 부모노드(Parent Node)를 가질 수 있다

- 비 선형구조(Non-linear structure)란 하나의 노드에 연결된 노드가 복수 개이면서 계층구조

- 트리에서는 루트노드(가장 상위에 위치한 노드)를 제외한 모든 노드가 하나의 상위 노드만을 가지는 특징

- 하나 이상의 상위 노드를 갖는다면 그래프

- 트리는 많은 데이터를 효율적으로 저장하고 검색할 수 있는 기능 -> 트리의 목적
  *데이터와 관련된 트리 : B-Tree(ex. 하나의 노드(data가 하나만 저장)밑에 50개의 노드(data가 50개를 저장)를 가질 수 있다)

- 트리구조는 주로 '포인터(or 재귀함수)'를 사용한다

- 트리는 배열로 정의할 수 없다(배열은 연속공간에 저장되어있으며 크기가 사전에 정의되있어야하기 때문)




<트리의 개념> - (1)
- 트리는 하나 이상의 '유한한 개수의 노드(data)'로 구성되어 있으며, 최상위에 위치한 루트노드(Root Node)에서 시작하여
  노드와 노드는 간선(edge)으로 연결되어있다




<트리의 개념> - (2)
- 트리 구조에서 많이 사용되는 용어

1. 노드(Node) : 트리를 구성하는 하나의 항목 -> 데이터가 저장되어있는 공간

2. 간선(Edge) : 노드와 노드를 연결하는 선 -> 가상의 보이지 않는 논리적인 선(포인터) 또는 연결
  *포인터 : 컴퓨터 메모리상의 주소

3. 루트(Root) : 최상위에 존재하는 노드, 부모노드가 존재하지 않는다

4. 레벨(Level) : 루트 노드에서부터 하나의 간선마다 레벨이 1씩 증가

5. 부모/자식 노드(Parent/Child Node) : 한 노드에 간선으로 연결된 상위 노드를 부모노드라 하고
   하나의 노드에 간선으로 연결돼 하위의 노드를 자식노드라고 한다

6. 말단 노드(Leaf Node) : 최하위 레벨에 존재하는 노드, 자식노드가 존재하지 않는다

7. 비 말단 노드(Non-leaf Node) : 최하위 노드를 제외한 다른 모든 노드

8. 형제 노드(Brothers/Siblings) : 하나의 부모 노드에 연결된 모든 자식 노드들

9. 조상 노드(Ancestors) : 하나의 노드에서 루트노드까지의 모든 상위 레벨에 존재하는 노드들

10. 자손 노드(Descendants) : 하나의 노드에서 말단 노드까지 간선으로 연결된 모든 노드들

11. 차수(Degree) : 어떤 노드에 연결된 자식 노드의 개수

12. 트리의 차수(Degree of a tree) : 트리 내의 노드의 최대 차수 -> 최대차수(=최대용량)

13. 높이(Height) : 말단 노드에서 어떤 노드까지의 레벨 수

14. 깊이(Depth) : 루트 노드에서 어떤 노드까지의 레벨 수

15. 숲(Forest) : 여러 개의 트리가 모인 구조

16. 부 트리, 일부 트리, 부분 트리(Sub Tree) : 트리 내의 노드와 간선들의 부분집합
  - 노드와 간선들이 서로 '연결되어야' 부분트리가 된다 -> 즉, 간선과 노드들이 분리된 상태는 부분트리로 인정되지 않는다

17. 순서 트리(Ordered Tree) : 노드의 '위치'를 의미, 부모노드의 연결이 다를 경우

18. Oriented tree : '레벨'에 의미를 가진다(위치는 무의미), 첫번 째 레벨에 A, 두번 째 레벨에 B, C 등
    *순서트리로 보면 다른 구조일 수 있고, 레벨트리로 보면 같은 구조일수도 있다

19. 사향 트리(Skewed Tree) : 트리를 구성하는 노드들이 한 쪽 방향으로 '비대칭' 상태로 커지는 상태를 말한다
  - 상당히 비효율적인 구조
    *불균형상태의 구조 : 같은 레벨에 들어갈 수 있는 데이터의 갯수가 적어지거나 달라질 수 있다, 레벨의 숫자에 비해 저장할 수 있는 데이터의 갯수가 적어진다
    *균형상태의 구조 : 같은 레벨에 들어갈 수 있는 데이터의 갯수가 많아진다, 레벨의 숫자에 비해 저장할 수 있는 데이터의 갯수가 많아진다
    *이진트리 - 데이터의 갯수 : 2^n
    *삼진트리 - 데이터의 갯수 : 3^n
 
20. 트리의 순회(Traversal) : 트리내의 모든 Node를 한 번씩 정해진 순서로 방문하는 것을 말한다
     트리의 순회에는 모두 5가지 방식이 있다

21. Level Order : 위에서 아래로, 왼쪽에서 오른쪽으로

22. Family Order : 부모노드에서 시작 자식노드를 왼쪽에서 모두 방문하고 가장 오른쪽 노드에 대해 동일한 과정을 반복

23. 전위 순회(Preorder) : 부모노드가 우선 방문하고 왼쪽 부 트리가 오른쪽 부 트리에 우선하는 방식

24. 중위 순회(Inorder) : 왼쪽 부 트리를 모두 방문한 뒤 부모 노드를 방문하고 오른쪽 부 트리를 방문하는 방식(Binary Tree에서만 가능한 방식)

25. 후위 순회(Postorder) : 왼쪽 부 트리, 오른쪽 부 트리를 모두 방문한 뒤 부모 노드를 방문하는 방식

'알고리즘 분석' 카테고리의 다른 글

구조체의 개념, 포인터, 이중포인터  (0) 2023.03.17
이진트리(Binary Tree)  (0) 2023.03.09
트리의 순회  (0) 2023.03.09