1. 포화 이진트리(Full Binary Tree)

1) 최대 노드 개수인 2^(h+1) - 1의 노드를 가진 이진트리
2) 루트 1번으로 하여 2^(h+1)-1까지 정해진 위치에 대한 노드 번호를 가진다.
2. 완전 이진트리(Complete Binary Tree)

3. 편향 이진트리(Skewed Binary Tree)


<노드 번호의 성질>
class Node {
int data;
Node* left;
Node* right;
..
..
}

=> '중위순회'하면 오름차순으로 정렬된 값을 얻을 수 있다.
<탐색 연산>
1. 루트에서 시작
2. 탐색할 키값 x를 루트 노드의 키값과 비교
(2-1) 키값x == 루트 노드이 키값, 원하는 원소를 찾았으므로 탐색연산 성공
(2-2) 키값x < 루트 노드의 키값, 루트 노드의 왼쪽 서브트리에 대해서 탐색연산 수행
(2-3) 키값x > 루트 노드의 키값, 루트 노드의 오른쪽 부트리에 대해서 탐색연산 수행
3. 부트리에 대해서 순환적으로 탐색 연산을 반복
<삽입 연산>
1. 먼저 탐색 연산을 수행
<삭제 연산>
1. 먼저 탐색 연산을 수행
2. 삭제 수행
(삭제할 노드가 단말 노드인 경우)
(2-1) 단말 노드의 부모 노드를 찾아서 연결 끊기.
(삭제할 노드가 하나의 서브트리만 가지고 있는 경우)
(2-2) 해당 노드를 삭제하고 서브 트리에서 삭제될 노드의 값과 가장 근사한 값을 갖는 노드를 서브 트리 루트로 설정한 후 부모 노드에 붙임.
(삭제할 노드가 두 개의 서브트리를 가지는 경우)
(2-3) 노드를 삭제하고 이를 대체하는 노드를 왼쪽 서브 트리의 가장 오른쪽 노드로 정하거나, 오른쪽 서브 트리의 가장 왼쪽 노르로 정하면 됨.
<<연산의 시간 복잡도>>
1. 탐색, 삽입, 삭제 시간은 트리의 높이에 좌우된다.
=> O(h), h: BST의 깊이(height)
2. 평균의 경우
=> 이진트리가 균형적으로 생성되어 있는 경우, O(logN)
3. 최악의 경우
=> 한쪽으로 치우친 경사 이진트리의 경우, O(n)
=> 순차 탐색과 시간복잡도가 같다.
<<검색 알고리즘의 비교>>
1. 배열에서의 순차 검색: O(n)
2. 정렬된 배열에서의 순차 검색: O(n)
3. 정렬된 배열에서의 이진탐색: O(logN)
-> 고정 배열 크기와 삽입, 삭제 시 추가 연산 필요
4. 이진탐색 트리에서의 평균: O(logN)
-> 최악의 경우: O(n)
-> 완전 이진트리 또는 균형 트리로 바꿀 수 있다면 최악의 경우를 없앨 수 있다.

<삽입 연산> => O(logN)
1. 힙에 새로운 요소가 들어오면, 일단 새로운 노드를 힙의 마지막 노드에 다음 위치에 이어서 삽입한다.
2. 새로운 노드를 부모 노드와 교환해나간다. 만약 교환이 불가능하면 그 위치에 자리잡는다.


<삭제 연산> => O(logN)

