我理解删除具有两个子树的节点时的想法:I "erase"节点's value and replace it with either its predecessor from the left subtree' s值或右子树值的后继值,然后删除该节点 .
但是,如果我选择右子树的后继者或左子树的前任,这是否重要?或者只要在执行删除后仍然有二进制搜索树,它是否有效?
如果节点有两个子节点,则执行删除操作的两种方法都有效 .
请记住,当您获得有序前导节点或有序后继节点时,必须在该节点上调用delete操作 .
您选择更换哪一个并不重要 . 事实上,你可能需要两者 .
看看下面的BST .
7 / \ 4 10 / \ / 1 5 8 \ 3
要删除 1 ,您需要将 1 替换为右节点 3 .
1
3
要删除 10 ,您需要将 10 替换为左节点 8 .
10
8
2 回答
如果节点有两个子节点,则执行删除操作的两种方法都有效 .
请记住,当您获得有序前导节点或有序后继节点时,必须在该节点上调用delete操作 .
您选择更换哪一个并不重要 . 事实上,你可能需要两者 .
看看下面的BST .
要删除
1
,您需要将1
替换为右节点3
.要删除
10
,您需要将10
替换为左节点8
.