더북(TheBook)

자식이 하나 있는 노드의 삭제

다음은 삭제 노드가 자식이 하나 있는 경우입니다.

(중략)

    #2-1. 자식 노드가 하나일 때: 왼쪽 자식이 있을 때

    elif not cur.right:

        rem_node = cur

        cur = cur.left

    #2-2. 자식 노드가 하나일 때: 오른쪽 자식이 있을 때

    elif not cur.left:

        rem_node = cur

        cur = cur.right

(중략)


bst.remove(8)

bst.preorder_traverse(bst.get_root(), f)


실행결과 TreeNode of 8 is deleted
6 3 2 4 5 10 9 11


자식 노드가 하나인 노드를 삭제하는 코드입니다. 오른쪽 자식이 있는 경우를 예로 보면 삭제 노드 cur을 미리 rem_node에 할당해 두고, 반환되어 업데이트에 쓰일 curcurright를 참조하게 합니다. 그림을 통해 살펴보죠.

그림 14-16에서 cur이 참조하는 10 노드와 rem_node의 8 노드가 묶여 반환될 것입니다.

314

그림 14-16 자식 노드가 하나인 경우 ①

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