我理解删除具有两个子树的节点时的想法:I&#34; erase&#34;节点的值,并将其替换为左子树值的前一个值或右子树值的后继值,然后删除 节点。< / p>
但是,如果我选择右子树的后继者或左子树的前任,是否重要?或者只要在执行删除后仍然有二进制搜索树,它是否有效?
答案 0 :(得分:0)
如果节点有两个子节点,则执行删除操作的两种方法都有效。
请记住,当您获得有序的前任节点或有序后继节点时,您必须在该节点上调用删除操作。
答案 1 :(得分:0)
您选择更换哪一个并不重要。事实上,你可能需要两者。
请查看以下BST。
7
/ \
4 10
/ \ /
1 5 8
\
3
要删除1
,您需要将1
替换为正确的节点3
。
要删除10
,您需要将10
替换为 left 节点8
。