hello world

이진 검색 트리(Binary Search Tree) 본문

자료구조

이진 검색 트리(Binary Search Tree)

sohyun_92 2020. 11. 10. 21:29
728x90

검색트리의 필요성을 알아보기위해

배열과 정렬의  [시간 복잡도] 

    SEARCH INSERT DELETE
배열 정렬 O(logN) O(N) O(N)
정렬X O(N) O(1)  O(1)

 

    SEARCH INSERT DELETE
연결리스트 정렬 O(N) O(N) O(N)
정렬X O(N) O(1) O(1)

 

배열 정렬했을경우 INSERT와 , DELETE자기자리를 찾아야하기때문에 아무렇게나 넣기 불가능

연결리스트의 경우 정렬을 해뒀더라도 binary search 불가능하다. 순차적으로 따라가 볼 수 밖에 없음

정렬된 혹은 정렬되지 않은 배열 혹은 연결리스트를 사용할 경우 INSERT, SEARCH, DELETE 중 적어도 하나는 O(n) 

 

어떻게 하면 INSERT, SEARCH, DELETE 를 효율적으로 하는가?

대표적인 방법

 

1) 탐색 트리(binary search tree)

2) 해쉬

 

검색 트리

일반적으로 SEARCH, INSERT, DELETE 연산이 트리의 높이에 비례하는 시간 복잡도를 가진다.

 

이진 검색 트리(Binary Search Tree)

-이진탐색(binary search)와 연결리스트(Linked list)를 결합한 자료구조의 일종

(이진탐색은 탐색은 빠르지만 삭제,입력 불가능 연결리스트는 입력 삭제는 효율적이지만 탐색하는데 복잡) 

- 이진트리(부모 노드는 최대 두명 자식 가질 수 있음, 왼쪽 노드와 오른쪽 노드는 구분됨)
- 각 노드에 하나의 키(데이터)를 저장

- 각 노드 v에 대해서 그 노드의 왼쪽 subTree에 있는 키들은 key[v]보다 작거나 같고,

  오른쪽 부트리에 있는 값은 크거나 같다.

( 부모 노드는 왼쪽 서브 트리보다 크고, 오른쪽 서브 트리보다는 작다.)

-SEARCH

Tree-Search(x.k) // k는 내가 찾는 값 , x : 트리의 노드
if x = NIL or k = key[x]  //x 라는 노드 가 존재하지 않는다면 , 노드 x에 저장된 값=k 라면
  then return x
if k < key[x]    
  then return Tree-Search(left[x],k)  //왼쪽으로
  else then Tree-Search(right[x],k)  //오른쪽으로 따라 내려감
  
  시간 복잡도 O(h) , h는 트리의 높이

 

 

참고 

www.inflearn.com/course/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B0%95%EC%A2%8C/dashboard

'자료구조' 카테고리의 다른 글

해싱3  (0) 2020.11.29
해슁1  (0) 2020.11.24
red black tree  (0) 2020.11.17
이진검색트리3  (0) 2020.11.15
스택(Stack)  (0) 2020.10.16
Comments