我的作业中有一个关于b-tree删除的问题,最小分支因子t = 2。
[P]
/ \
/ \
/ \
/ \
/ \
[G][L] [W]
/ | \ / \
/ | \ / \
/ | \ / \
BD J N R Y
/ | \ / \ / \ / \ / \
A C F I K M O Q ST X Z
现在从上面的树中删除Y后,我得到了最后一棵树..
[P]
/ \
/ \
/ \
/ \
/ \
[G][L] [W]
/ | \ / \
/ | \ / \
/ | \ / \
BD J N R X
/ | \ / \ / \ / \ / \
A C F I K M O Q S T Z
这会是删除Y之后的最后一棵树...我不确定这就是为什么要在这里发帖纠正..谢谢
答案 0 :(得分:0)
我不认为这是正确的,T不能在W的右子树中,因为T在W之前。
[P]
/ \
/ \
/ \
/ \
/ \
[G][L] [T]
/ | \ / \
/ | \ / \
/ | \ / \
BD J N R X
/ | \ / \ / \ / \ / \
A C F I K M O Q S W Z
以下是步骤:
删除Y:
[P]
/ \
/ \
/ \
/ \
/ \
[G][L] [W]
/ | \ / \
/ | \ / \
/ | \ / \
BD J N R null
/ | \ / \ / \ / \ / \
A C F I K M O Q ST X Z
替换为右子树(Z)中的最小值,在Z的旧位置重新平衡
[P]
/ \
/ \
/ \
/ \
/ \
[G][L] [W]
/ | \ / \
/ | \ / \
/ | \ / \
BD J N R Z
/ | \ / \ / \ / \ /
A C F I K M O Q ST X
不能从兄弟姐妹(X)借钱,在Z:
合并儿童 [P]
/ \
/ \
/ \
/ \
/ \
[G][L] [W]
/ | \ / \
/ | \ / \
/ | \ / \
BD J N R [X,Z]
/ | \ / \ / \ / \
A C F I K M O Q ST
不能从兄弟姐妹(R)借钱,在W:
合并儿童 [P]
/ \
/ \
/ \
/ \
/ \
[G][L] [Q,R,S,T,W,X,Z]
/ | \
/ | \
/ | \
BD J N
/ | \ / \ / \
A C F I K M O
合并节点(以前为W)现在太大,均匀分割:
[P]
/ \
/ \
/ \
/ \
/ \
[G][L] [T]
/ | \ / \
/ | \ [Q,R,S] [W,X,Z]
/ | \
BD J N
/ | \ / \ / \
A C F I K M O
T的左节点现在太大,均匀分开:
[P]
/ \
/ \
/ \
/ \
/ \
[G][L] [T]
/ | \ / \
/ | \ / [W,X,Z]
/ | \ /
BD J N R
/ | \ / \ / \ / \
A C F I K M O Q S
T的右边节点也太大,均匀分割:
[P]
/ \
/ \
/ \
/ \
/ \
[G][L] [T]
/ | \ / \
/ | \ / \
/ | \ / \
BD J N R X
/ | \ / \ / \ / \ / \
A C F I K M O Q S W Z
答案 1 :(得分:0)
这是一个很好的问题。 L走到根, P去了它的右边孩子,坐在W附近 N和它的孩子成为P的左孩子 对于删除Y,W必须在R和Y的中间向下 Y在X和Z之间下降 现在你可以删除Y ...
[ L ]
/ \
!!!!!! / \
/ \
/ \
/ \
[G] [P]
/ \ / \
/ \ / \
/ \ / \
[B D] [J] N R W
/ | \ / \ / \ / | \
A C F I K M O Q ST X Z ---> Y
答案 2 :(得分:0)
这是一个很好的问题。 L走到根, P去了它的右边孩子,坐在W附近 N和它的孩子成为P的左孩子 对于删除Y,W必须在R和Y的中间向下 Y在X和Z之间下降 现在你可以删除Y ...
[ L ]
/ \
/ \
/ \
/ \
/ \
[G] [P]
/ \ / \
/ \ / \
/ \ / \
[B D] [J] N R W
/ | \ / \ / \ / | \
A C F I K M O Q ST X Z --->Y