본문 바로가기
  • 개발을 사랑하는 실실쟌의 블로그입니다
CS공부/자료구조

[자료구조] 이진 탐색 트리(Binary Search Tree)

by 실실쟌 2022. 10. 11.

이진 탐색 트리

- 탐색에 유용하게 설계된 이진 트리를 말한다.

- 이진 트리

   : 자식 노드가 두개인 트리

- 설계 규칙

  1. 각 노드는 서로 다른 키를 가진다.

  2. 각 노드는 최대 2개의 자식 노드를 가진다(최대 두개 분기)

  3. 각 노드의 key는

     - left subtree의 모든 노드의 key보다 크고

     - right subtree의 모든 노드의 key보다 작다.

 

검색

search(r, x)
	if(r == null || r.item == x)
    		return r
	else if(r.item < x)
    		return search(r.left, x)
	else
    		return search(r.right, x)

- 시간복잡도 평균 theta(logn), 최악 theta(n)

 

삽입

insert(r, x)
//r : 서브트리의 루트, x : 삽입하려는 key
//x가 트리 내에 없을 때
	if(r==null)
    	r의 부모 아래 x 삽입
    else if(x < r.key)
    	insert(r.left, x)
	else
    	insert(r.right, x)

- 시간복잡도 평균 theta(logn), 최악 theta(n)

 

 

삭제

remove(x)
	node r = search(root, x)
	if(r이 리프 노드)
		r을 삭제(r의 부모가 null가리키게)
	else if(r의 자식이 하나)
		r의 부모가 r의 자식을 가리키게
	else
		r의 right subtree의 left-most(minimum) 원소 s find
		s를 r자리에 복사
		remove(s)

- 시간복잡도 평균 theta(logn), 최악 theta(n)

 

 

 

장단점

1) 장점

 - 배열과 비교했을 때 검색/삽입/삭제가 효율적이기 때문에 검색/삽입/삭제가 많이 일어나는 탐색작업에서 유용하다.

 

2) 단점

 - naive한 구현에서 skewed tree, 즉 worst case가 발생가능하다.

 

*Binary Tree에 관련된 Theorems

1. 이진 탐색 트리를 대상으로 inorder traversal을 하면 key가 정렬된 순서로 방문하게 된다.

    : 그래서 한번 inorder traversal한 다음 가운데 것을 root key로 잡으면 balanced가 된다.

2. 높이 h의 완전 이진 트리는 2^h-1개의 노드를 가진다.

3. n개 노드를 가진 이진 트리의 최소 높이는 ceil[log(n+1)]이다.

4. n개 노드를 가진 이진 트리의 IPL은 O(nlogn)이다.

    : IPL - Internal Path Length, 각 노드를 방문하는데 걸리는 비교 횟수의 합

 

'CS공부 > 자료구조' 카테고리의 다른 글

[자료구조] 힙(Heap)  (0) 2022.10.10
[자료구조] Queue와 Stack  (0) 2022.10.10
[자료구조] 리스트(List)  (0) 2022.10.10
01. 객체지향 프로그래밍이란 무엇인가?(OOP, JAVA)  (0) 2022.10.01
01. 재귀  (0) 2021.03.05

댓글