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

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

    (중략)

        #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 자식 노드가 하나인 경우 ①

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