더북(TheBook)

코드 8-6

    def __delete_recursion(self, cur, target):
        if not cur:
            return None
        elif target < cur.key: 
            new_left = self.__delete_recursion(cur.left, target)
            self.__make_left(cur, new_left) 
        elif target > cur.key: 
            new_right = self.__delete_recursion(cur.right, target)
            self.__make_right(cur, new_right)
        else: 
            if not cur.left and not cur.right: 
                cur = None
            elif not cur.right: 
                cur = cur.left
            elif not cur.left: 
                cur = cur.right
            else: 
                replace = cur.left
                replace = self.max(replace)
                cur.key, replace.key = replace.key, cur.key
                new_left = self.__delete_recursion(cur.left, replace.key)
                self.__make_left(cur, new_left)
        return cur

    def delete(self, target):
        new_root = self.__delete_recursion(self.root, target)
        self.root = new_root

삭제하려는 노드가 현재 노드보다 작을 때

삭제하려는 노드가 현재 노드보다 클 때

삭제하려는 노드를 찾았을 때

리프 노드일 때

자식이 하나일 때 왼쪽 자식만 있을 때

자식이 하나일 때 오른쪽 자식만 있을 때

자식이 둘일 때

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