【发布时间】:2014-05-18 13:56:14
【问题描述】:
我正在关注一本书,它解释了如何从二叉搜索树中删除节点,基本上如果我们有这棵树:
10
/ \
4 100
/ \
1 8
/ \
6 9
\
7
我们要删除节点 4,书上说我应该:
- 在其右子树(即 6)中查找 4 的后继者
- 交换 4 和 6
- 从右子树中删除 6
- 将 4 的左子树(本例中为 1)附加到新节点 6
因此我们得到
10
/ \
6 100
/ \
1 8
/ \
7 9
但是我想到了另一种方法:
- 找到 4 个右子树的最小元素(即 6)
- 将 4 的左子树附加到 6(它不会有左子树)
- 将父元素 (10) 附加到 4 的右侧元素 (8)。如果算法是递归的,我们可以返回 8
因此我们得到
10
/ \
8 100
/ \
6 9
/ \
1 7
现在我想问一下:我看到我的解决方案(至少在这种情况下)产生了一个稍微不平衡的树。
我有理由使用我的书而不是我自己的吗? 似乎我的解决方案更容易实施(至少从我的角度来看),但我更喜欢其他人指出我是否弄错了。
【问题讨论】:
标签: algorithm binary-tree binary-search-tree