2016-12-16 145 views
-1

我想知道如何从非搜索二叉树中删除一个节点。C - 从二叉树中删除节点

I.e.如果我有这样的二叉树:

....0.... 
...1.....2... 
.......3.....4.. 

我希望做删除节点,在值为2

+0

我不明白架构和你的代码在哪里? – Stargateur

回答

0

如果它是一个有序树(如搜索树),你会通常会删除节点(在您的示例中为2),并将其替换为左侧子树(3)的最右侧叶子或右侧子树(4)的最左侧。如果它不是二叉查找树,则可能可以做同样的事情。它当然取决于树的语义以及结构代表什么(如果有的话)。如果结构没有意义,那么只需删除要删除的节点,并将其替换为任何叶节点。

+0

我应该将0至3的正确孩子连接起来,然后将3至4的正确孩子连接起来并释放2? –

+0

不要忘记2的左子树!它可能包含的不仅仅是3个。如果你有一个递归例程来释放分配(你可能需要在释放节点2之前将它们设置为NULL),请注意2的子指针。另一种选择是将数据(3)从现在为3的叶移至现在要删除的值(2),然后释放叶节点。请记住,替换必须来自叶节点。 (例如,如果你想删除0,不要选择2.) – e0k