二进制树删除一个子节点

时间:2014-03-31 23:49:00

标签: tree binary-tree binary-search-tree

我有一个关于BST删除一个子节点案例的非常简单的问题。

我想检查我的root有一个孩子的情况,但是孩子又有两个子节点。它还应该删除整棵树吗?

例如我有

      5
     / 
    6  
   / \
  9  10

如果我删除(5)。它应该删除整个树,因为5只有一个孩子,即6但是6又有两个子节点。 6还应该只有一个孩子,或者我们不关心在为一个孩子的情况删除根5时有多少个子节点6

2 个答案:

答案 0 :(得分:0)

当一个节点只有一个子节点时,我可以删除它并将其子节点移植到其所在位置(无论子节点是什么),同时保留二叉搜索树属性。这是一个例子:

      7
     / \
    5   9
   /
  3
 / \
1   4

然后,如果我删除5并将其替换为唯一的子树,我得

    7
   / \
  3   9
 / \
1   4

哪个仍然是BST。

答案 1 :(得分:0)

仅在二叉树中删除节点涉及三种情况,

  • 删除Leaf节点[没有孩子的节点]
  • 删除包含1个孩子的节点
  • 删除包含2个孩子的节点

删除叶节点,只需释放节点空间并使父节点链接为null。

删除具有1个子节点的节点将删除该节点并将孙子节点作为其子节点。

      10
     / \
    5   15
   /     \
  2      17  
 / \
1   3

如果我们想要删除5,则将2作为10的子项,因此树变为

      10
     / \
    2   15
   / \    \
  1   3   17

这也适用于从树中删除15。

http://webdocs.cs.ualberta.ca/~holte/T26/del-from-bst.html