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)라고 불립니다.

Binary Tree Example

  • 루트 이진 트리(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



Comments