当节点有两个子节点时在BST中删除

时间:2012-12-05 05:17:30

标签: algorithm data-structures

我正在尝试删除BST中有两个子节点的节点。 例如,

     |
    12
   /  \
  5    15
 / \     \
2   6    20

我想删除包含info = 12的节点。我需要帮助来执行此操作。

2 个答案:

答案 0 :(得分:5)

您需要获得其左子树的最右侧子项,或者其右子树的最左侧子项(在您的示例中为6或15),并将其中一个移动到该位置,然后你可以删除你想要的节点。

如果您正在做任何事情来跟踪子树中的节点数量,您通常希望从较大的子树中选择节点,因此当您移动它时,树将至少保持平衡因为它开始了。例如,在这种情况下,最好得到6比15以帮助保持平衡 - 但如果你只有一个普通的,不平衡的BST,你可能没有这些信息很容易获得。

答案 1 :(得分:0)

在算法第4版的书籍网站上有一个很好的讨论:http://algs4.cs.princeton.edu/32bst/