从B树删除

时间:2013-10-19 16:33:15

标签: data-structures binary-tree b-tree

我的作业中有一个关于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之后的最后一棵树...我不确定这就是为什么要在这里发帖纠正..谢谢

3 个答案:

答案 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