Tree(트리)?
- 트리는 값을 가진 노드(Node)와 이 노드들을 연결해주는 간선(Edge)으로 이루어진 자료구조이다.
- 트리는 하나의 루트(Root) 노드를 가진다.
- 루트 노드는 0개 이상의 자식 노드를 가진다.
- 그 자식 노드 또한 0개 이상의 자식 노드를 갖고 있고, 이는 반복적으로 정의된다.
- 트리의 모든 노드들은 0개 이상의 자식 노드를 갖고 있으며, 보통 부모-자식 관계로 부른다.
- 가족 관계도를 트리 형식으로 나타내며, 자료구조인 트리도 이 방식을 그대로 구현한 것
그래프 vs 트리
- 그래프와 트리의 차이점은 사이클(Cycle)의 유무로 설명할 수 있다.
- 사이클이 존재하지 않는 그래프라고 하여 무조건 트리인 것은 아니다.
- 사이클이 없는 그래프는 Forest라고 지칭한다.
- 트리의 경우 사이클이 없고 모든 노드가 간선으로 연결되어 있다.
트리의 특징
- 트리에는 사이클이 존재할 수 없다.
- 만약 사이클이 만들어진다면, 그것은 트리가 아니고 그래프다
- 모든 노드는 자료형으로 표현이 가능하다.
- 루트에서 한 노드로 가는 경로는 유일한 경로 뿐이다.
- 노드의 개수가 N개면, 간선은 N-1개를 가진다.
- 그래프의 한 종류이다. 최소 연결 트리 라고도 불린다.
- 트리는 DAG(Directed Acyclic Graphs, 방향성이 있는 비순환 그래프)의 한 종류
- loop나 circuit이 없다. 당연히 self-loop도 없다.
- 트리는 계층 모델이다.
- 한 개의 루트 노드만이 존재하며 모든 자식 노드는 한 개의 부모 노드만을 가진다.
- 부모-자식 관계이므로 흐름은 top-bottom 아니면 bottom-top으로 이루어진다.
- 순회는 Pre-order, In-order 아니면 Post-order로 이루어진다. 이 3가지 모두 DFS/BFS안에 있다.
트리와 관련된 용어
- 루트 노드(Root Node)
- 부모가 없는 노드, 트리는 하나의 루트 노드만을 가진다
- 단말 노드(Leaf Node)
- 자식이 없는 노드, 말단 노드 혹은 잎 노드라고 부른다.
- 내부 노드(Internal Node)
- 단말 노드가 아닌 노드
- 간선(Edge)
- 노드를 연결하는 선
- link 혹은 branch라고도 부름
- 형제(Sibling)
- 같은 부모를 가지는 노드
- 노드의 크기(Size)
- 자신을 포함한 모든 자손 노드의 개수
- 노드의 깊이(Depth)
- 루트에서 어떤 노드에 도달하기 위해 거쳐야 하는 간선의 수
- 노드의 레벨(Level)
- 루트에서 어떤 노드에 도달하기 위해 거쳐야 하는 간선의 수
- 노드의 차수(Degree)
- 하위 트리 개수 / 간선 수 (degree)
- 각 노드가 지닌 가지의 수
- 트리의 차수(Degree of Tree)
- 트리의 최대 차수
- 트리의 높이(Height)
- 루트 노드에서 가장 깊숙히 있는 노드의 깊이
트리의 순회 방식
- 트리를 순회하는 방식은 4가지가 존재한다.
전위 순회(Pre-order)
- 각 부모 노드를 순차적으로 먼저 방문하는 방식이다.
- 부모 → 왼쪽 자식 → 오른쪽 자식
- 1 -> 2 -> 4 -> 8 -> 9 -> 5 -> 10 -> 11 -> 3 -> 6 -> 13 -> 7 -> 14
중위 순회(In-order)
- 왼쪽 하위 트리를 방문 후 부모 노드를 방문하는 방식이다.
- 왼쪽 자식 → 부모 → 오른쪽 자식
- 8 → 4 → 9 → 2 → 10 → 5 → 11 → 1 → 6 → 13 → 3 →14 → 7
후위 순회(Post-order)
- 왼쪽 하위 트리부터 하위를 모두 방문 후 부모 노드를 방문하는 방식이다.
- 왼쪽 자식 → 오른쪽 자식 → 부모
- 8 → 9 → 4 → 10 → 11 → 5 → 2 → 13 → 6 → 14 → 7 → 3 → 1
레벨 순회(Level-order)
- 부모 노드부터 계층 별로 방문하는 방식이다.
- 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 10 → 11 → 13 → 14
출처
https://gmlwjd9405.github.io/2018/08/12/data-structure-tree.html
https://github.com/gyoogle/tech-interview-for-developer
'CS > Data Structure' 카테고리의 다른 글
[Data Structure] B-Tree&B+Tree (0) | 2024.04.03 |
---|---|
[Data Structure] Binary Search Tree (1) | 2024.03.31 |
[Data Structure] Heap (0) | 2024.03.31 |
[Data Structure] Queue (0) | 2024.03.31 |
[Data Structure] Stack (0) | 2024.03.31 |