🚨 'C언어로 쉽게 풀어쓴 자료구조' 라는 책을 활용했던 과거 수업 필기를 정리한 것입니다.
💡 Chapter 순서는 책과 같지만 교수님의 과거 수업 내용에 따라 일부 책과 다른 내용이 있습니다.
모든 node의 자식이 둘 이하인 트리(tree) -> left, right
: 재귀적 방문( stack이 사용됨)
// Search (Root, key)
Search(Node *p, key)
{ if(p == NULL) return Not Found
if(key == p->Data) return Found
if(key < p->Data){
return search(p->Left, key); // 재귀
}else {
return search(p->Right, key);
}
}
// 시간 : O(lg N)
if(Root == NULL) Root = p
else Insert(Root,p) // 현재 방문중인 노드 -> x != NULL
Insert(Node *x, Node *p)
{
if(p->Data == x->Data) return; // 이미 있다.
if(p->Data < x->Data){ // 왼쪽 삽입 예정
if(x->Left == NULL) x->Left = p;
else Insert(x->Left, p);
}else { // 오른쪽 삽입 예정
if(x->Right == NULL) x->Right = p;
else Insert(x->Right, p);
}
}
// 시간 O(lg N)
모든 Node의 좌우 Subtree의 높이 차가 1 이내일 때 균형 이진 탐색 트리 (Balanced BST)로서 검색, 삽입 삭제가 모두 O(lg N)에 가능 (= 최악의 경우가 없음)