从二叉搜索树中删除节点

时间:2014-03-24 05:40:37

标签: data-structures binary-search-tree

我理解删除具有两个子树的节点时的想法:I&#34; erase&#34;节点的值,并将其替换为左子树值的前一个值或右子树值的后继值,然后删除 节点。< / p>

但是,如果我选择右子树的后继者或左子树的前任,是否重要?或者只要在执行删除后仍然有二进制搜索树,它是否有效?

2 个答案:

答案 0 :(得分:0)

如果节点有两个子节点,则执行删除操作的两种方法都有效。

请记住,当您获得有序的前任节点或有序后继节点时,您必须在该节点上调用删除操作。

答案 1 :(得分:0)

您选择更换哪一个并不重要。事实上,你可能需要两者。

请查看以下BST。

    7    
   / \    
  4   10    
 / \   /    
1   5  8
 \
  3

要删除1,您需要将1替换为正确的节点3

要删除10,您需要将10替换为 left 节点8