MY MEMO
[DATASTRUCTURE] Binary Tree & Binary Search Tree 본문
ALGORITHM/ALGORITHM STUDY
[DATASTRUCTURE] Binary Tree & Binary Search Tree
l_j_yeon 2017. 3. 30. 19:00+) 출처 : https://blog.weirdx.io/post/3656
이진 트리
이진 트리(binary tree)는 한 노드가 최대 2개의 자식 노드를 가지는 트리를 말하며 첫 번째 노드는 부모(parent), 자식 노드는 왼쪽(left), 오른쪽(right)라고 불립니다.
- 루트 이진 트리(rooted binary tree)는 모든 노드의 자식이 최대 2개인 루트를 가진 트리입니다.
- 포화 이진 트리(full binary tree)는 모든 노드가 2개의 자식 노드를 가지며 모든 레벨이 꽉 찬 트리입니다.
- 완전 이진 트리(complete binary tree)는 포화 이진 트리같이 모든 레벨이 꽉 찬 트리는 아니지만 모든 노드가 2개의 자식 노드를 가지는 트리입니다.
순회를 판단하는 기준 : Root를 언제 방문하는가!
1. 전위 순회 (Root -> Left -> Right)
2. 중위 순회 (Left -> Root -> Right)
3. 후위 순회 (Left -> Right -> Root)
출처: http://anster.tistory.com/153 [Old Lisper]
이진 탐색 트리
1. 각 노드에 값이 존재
2. 값이 중복된 노드가 없음
3. 노드의 왼쪽 서브트리에는 해당 노드의 값보다 작은 값들을 지닌 노드로 구성
4. 반대로 노드의 오른쪽 서브트리에는 해당 노드의 값보다 큰 값들을 지닌 노드로 구성
5. 좌우의 서브트리는 다시 각각 이진 탐색트리여야 함
이진 탐색트리는 평균적으로 원소의 탐색, 삽입, 삭제에 있어서 O(logn) 의 성능을 보장합니다.
최악의 경우에는, 그러니까 한쪽으로만 치우친 트리에서는 O(n) 의 성능이 나옵니다. 재
미있는 사실은, 힙소트처럼, 이진탐색트리도 정렬 알고리즘으로 사용할 수 있다는 점인데요.
이 경우 평균적으로는 O(nlogn) 의 성능을, 최악의 경우에는 O(n^2) 의 성능을 보입니다.
=> binary search tree를 이용 : 삽입,삭제,전위,중위,후위 순회를 구현
tree.h
function.h
Binary_Tree.cpp
'ALGORITHM > ALGORITHM STUDY' 카테고리의 다른 글
[DATASTRUCTURE] Hash Table (0) | 2017.03.30 |
---|---|
[DATASTRUCTURE] Heap Sort (0) | 2017.03.30 |
[Google Code Jam]2016_Qualification Round_ProblemC_Coin Jam (0) | 2017.03.28 |
[ALGOSPOT] RATIO 승률 올리기 (0) | 2017.02.25 |
[ALGOSPOT] ROUTING 신호 라우팅 (0) | 2017.02.25 |
Comments