각 노드의 왼쪽 서브트리에는 그 노드의 값보다 작은 값들을 지닌 노드만 있고, 각 노드의 오른쪽 서브트리에는 그 노드의 값보다 큰 값들을 지닌 노드만 있다.
좌우 서브트리는 각각이 다시 이진 탐색 트리이다.
따라서 이진 탐색 트리에서 최소값을 찾으려면 트리에서 가장 왼쪽으로 가면 되고, 가장 큰 값을 찾으려면 트리에서 가장 오른쪽으로 가면 된다.
이진 트리의 모든 노드를 방문하여 어떠한 작업을 진행하는 것을 이진 트리 탐색이라고 한다. 대표적으로는 중위순회, 전위순회, 후위순회가 있다.
왼쪽 자식 노드를 L, 오른쪽 자식 노드를 R, 내 노드를 P라고 할 떄
아래 트리를 각각의 방법으로 순회해보자.
방문 순서 : 1-3-4-6-7-8-10-13-14
방문 순서 : 8-3-1-6-4-7-10-14-13
방문 순서 : 1-4-7-6-3-13-14-10-8
후임자(successor): 해당 노드보다 값이 큰 노드들 중에서 가장 값이 작은 노드 ex) 위의 노드에서 8의 후임자는 ? 10
선임자(predecessor): 해당 노드보다 값이 작은 노드들 중에서 가장 값이 큰 노드 ex) 위의 노드에서 6의 선임자는 ? 4
검색하고자 하는 값을 루트 노드와 먼저 비교한다.
삽입을 하기 전 검색 수행 => 검색 후 일치하는 노드가 없으면 마지막 노드에서 키와 노드의 크기를 비교하여 왼쪽이나 오른쪽에 새로운 노드 삽입.
삭제하기 전 검색 수행 => 검색 후 일치하는 노드가 있어야 삭제 수행
루트 노드를 추가, 루트 노드를 삭제, 검색하고자 하는 값이 루트노드에 있음.
왼쪽 서브트리와 오른쪽 서브트리 중 선택한 쪽만 집중하면 되므로, 노드를 1/2씩 줄여나가는 것과 같음.
이진 탐색 트리가 왼쪽 또는 오른쪽으로 편향되어 있는데, insert, delete, search를 함에 있어 리프노드까지 가야할 경우이다.
참고:
https://www.youtube.com/watch?v=i57ZGhOVPcI&list=PLcXyemr8ZeoR82N8uZuG9xVrFIfdnLd72&index=8
쉬운 코드
https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%A7%84_%ED%83%90%EC%83%89_%ED%8A%B8%EB%A6%AC
위키백과
면접을 위한 CS 전공지식 노트(주홍철 저)