■ 자식이 하나 있는 노드의 삭제
다음은 삭제 노드가 자식이 하나 있는 경우입니다.
(중략)
#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에 할당해 두고, 반환되어 업데이트에 쓰일 cur은 cur의 right를 참조하게 합니다. 그림을 통해 살펴보죠.
그림 14-16에서 cur이 참조하는 10 노드와 rem_node의 8 노드가 묶여 반환될 것입니다.
그림 14-16 자식 노드가 하나인 경우 ①