我有一个看起来像这样的BST: 我试图删除节点12(有2个孩子), 我想知道我是否正确删除了它?
删除前
12
_/ \_
5 18
/ \ / \
= = 15 19
2 9 / \
13 17
删除后:
18
_/ \_
5 19
/ \ /
= = 15
2 9 / \
13 17
我的实施在这里是否正确? 感谢。
删除后编辑更新:
13
_/ \_
5 18
/ \ / \
= = 15 19
2 9 \
17
答案 0 :(得分:0)
我们举一个简单的例子。
考虑这棵树:
A
/ \
B C
要删除A,请执行以下操作:
“左/右子节点”我的意思是你需要向左或向右向下导航,只要你有那个方向的子节点,然后你来到一个没有左/右子节点的节点(根据你去哪个方向),将“其他节点”挂钩到它作为该方向的新子节点。
让我们先考虑选择B,你最终会得到这个:
B
\
...
\
C
如果你先选择C,你最终会得到这个:
C
/
...
/
B
回到你的树上,它开始于:
12
/ \
5 18
/ \ / \
2 9 15 19
/ \
13 17
要删除12,并选择18替换它,首先要提升18:
5 18
/ \ / \
2 9 15 19
/ \
13 17
然后,由于18在前一个例子中对应于C,你需要将5个钩子连接到18作为最左边的子树,给你最后一棵树:
18
/ \
15 19
/ \
13 17
/
5
/ \
2 9
让我们来看看如果我们选择5代替12代替会发生什么:
宣传5:
5 18
/ \ / \
2 9 15 19
/ \
13 17
然后将18连接到5作为其最右边的子树:
5
/ \
2 9
\
18
/ \
15 19
/ \
13 17
要么没事。关于Wikipedia page的更多信息可能值得一读。