더북(TheBook)

이번에는 search를 살펴볼까요? searchinsert를 이해했다면 쉽게 이해할 수 있습니다. 코드만 간단하게 살펴보고 넘어가겠습니다.

코드 8-5

    def search(self, target):
        cur = self.root
        while cur:
            if cur.key == target:
                return cur
            elif cur.key > target:
                cur = cur.left
            elif cur.key < target:
                cur = cur.right
        return cur

코드 8-5는 search 메서드입니다. target이 있다면 cur를 루트부터 아래로 쭉 훑으면서 비교하여 target을 찾습니다. 이때 cur의 키와 target을 한 번 비교해서 자식으로 내려갈 때마다 다른 쪽 서브 트리의 모든 노드는 비교할 필요가 없어집니다. 이진 탐색과 같은 알고리즘입니다.

삽입, 탐색과 달리 BST의 삭제는 조금 어렵습니다. 삭제하려는 노드가 리프 노드인지, 자식이 하나만 있는 노드인지, 자식이 둘인지 나누어서 삭제해야 하기 때문입니다. 먼저 코드를 보겠습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.