트리: Difference between revisions
From CS Wiki
No edit summary |
(전위 순회, 중위 순회, 후위 순회에 대한 설명과 방법 추가. 레벨 순서 순회 추가) |
||
(One intermediate revision by one other user not shown) | |||
Line 34: | Line 34: | ||
* 검색: log(n)의 효율 | * 검색: log(n)의 효율 | ||
* 인덱스: [[B 트리]], [[AVL 트리]], [[T 트리]] 등 | * 인덱스: [[B 트리]], [[AVL 트리]], [[T 트리]] 등 | ||
* 정렬: Heap 구조 이용 | * 정렬: [[힙|Heap]] 구조 이용 | ||
== 트리의 순회 == | == 트리의 순회 == | ||
;Tree Traversal | ;Tree Traversal | ||
트리를 조회하는 방식 | 트리를 조회하는 방식 | ||
* 중위(Inorder) | ====== 전위 순회(Preorder) ====== | ||
* 후위(Postorder) | * 깊이 우선 순회(DFT, Depth-First Traversal) 라고도 하며, 주로 트리를 복사하거나 전위표기법을 구하는데 사용한다.[https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%A6%AC_%EC%88%9C%ED%9A%8C#%EC%A0%84%EC%9C%84_%EC%88%9C%ED%9A%8C_2] | ||
* 복사할 때 사용하는 이유는 트리의 노드부터 복사해야하기 때문이다. | |||
* 다음과 같은 방법으로 진행한다. | |||
*# 노드를 방문한다. | |||
*# 왼쪽 서브 트리를 전위 순회한다. | |||
*# 오른쪽 서브 트리를 전위 순회한다. | |||
====== 중위 순회(Inorder) ====== | |||
* 대칭 순회(symmetric) 라고도 하며, 이진 탐색 트리(BST, Binary Search Tree) 에서 값을 가져올 때 주로 사용한다. | |||
* 다음과 같은 방법으로 진행한다. | |||
*# 왼쪽 서브 트리를 중위 순회한다. | |||
*# 노드를 방문한다. | |||
*# 오른쪽 서브 트리를 중위 순회한다. | |||
====== 후위 순회(Postorder) ====== | |||
* 값을 삭제할 때 주로 사용한다. 그 이유는 루트 노드를 지우기 전에 하위 노드를 먼저 지워야하기 때문이다. | |||
* 다음과 같은 방법으로 진행한다. | |||
*# 왼쪽 서브 트리를 후위 순회한다. | |||
*# 오른쪽 서브 트리를 후위 순회한다. | |||
*# 노드를 방문한다. | |||
====== 레벨 순서 순회(level-order) ====== | |||
* 너비 우선 순회(breadth-first traversal) 라고도 한다. | |||
* 모든 노드를 낮은 레벨부터 차례대로 순회한다. | |||
== [[이진 트리]] == | == [[이진 트리]] == | ||
;Binary Tree | ;Binary Tree |
Latest revision as of 12:16, 2 May 2024
관련 용어[edit | edit source]
용어 | 의미 |
---|---|
차수(degree) | 노드의 부족 트리의 개수
|
단말 노드(leaf, terminal) | 차수가 0인, 가장 끝의 노드 |
내부 노드(internal) | 차수가 1 이상인, 단말이 아닌 노드 |
부모(parent) | 바로 상위 노드 |
자식(child) | 바로 하위 노드 |
형제(sibling) | 부모가 같은 노드 |
조상(ancestor) | 상위 노드, 부모 노드들의 집합 |
자손(descendant) | 하위 노드, 자식 노드들의 집합 |
레벨(level) | 상위 노드를 기준으로 한 깊이 |
깊이(depth) | 트리에 속한 최대 레벨 |
트리의 활용[edit | edit source]
트리의 순회[edit | edit source]
- Tree Traversal
트리를 조회하는 방식
전위 순회(Preorder)[edit | edit source]
- 깊이 우선 순회(DFT, Depth-First Traversal) 라고도 하며, 주로 트리를 복사하거나 전위표기법을 구하는데 사용한다.[1]
- 복사할 때 사용하는 이유는 트리의 노드부터 복사해야하기 때문이다.
- 다음과 같은 방법으로 진행한다.
- 노드를 방문한다.
- 왼쪽 서브 트리를 전위 순회한다.
- 오른쪽 서브 트리를 전위 순회한다.
중위 순회(Inorder)[edit | edit source]
- 대칭 순회(symmetric) 라고도 하며, 이진 탐색 트리(BST, Binary Search Tree) 에서 값을 가져올 때 주로 사용한다.
- 다음과 같은 방법으로 진행한다.
- 왼쪽 서브 트리를 중위 순회한다.
- 노드를 방문한다.
- 오른쪽 서브 트리를 중위 순회한다.
후위 순회(Postorder)[edit | edit source]
- 값을 삭제할 때 주로 사용한다. 그 이유는 루트 노드를 지우기 전에 하위 노드를 먼저 지워야하기 때문이다.
- 다음과 같은 방법으로 진행한다.
- 왼쪽 서브 트리를 후위 순회한다.
- 오른쪽 서브 트리를 후위 순회한다.
- 노드를 방문한다.
레벨 순서 순회(level-order)[edit | edit source]
- 너비 우선 순회(breadth-first traversal) 라고도 한다.
- 모든 노드를 낮은 레벨부터 차례대로 순회한다.
이진 트리[edit | edit source]
- Binary Tree