B树插入

时间:2013-10-19 16:09:02

标签: data-structures binary-tree branching-and-merging b-tree

嘿,我对我的作业有疑问,我能够解决它,我只是想让别人看看我是做对还是错......

A b-tree with minimum branching factor of t=3

               [D][G][K][N][V]
             /  /  /    |  \   \
            /  /  /     |   \   \
           /  /  /      |    \   \
          AC EF  HI    LM  OPRST  WX

Now when i insert J in above tree this is the output i am getting.... 
                     [K]
                   /      \
                  /        \
                 /          \     
               [D][G]    [N][V]
             /  /  /     /  \   \
            /  /  /     /    \   \
           /  /  /     /      \   \
          AC EF  HIJ  LM    OPRST  WX


After Inserting Q in above tree this is the Final tree i am getting.
                      [K]
                   /      \
                  /        \
                 /          \     
               [D][G]    [N][Q][V]
             /  /  /     /  / \  \
            /  /  /     /  /   \  \
           /  /  /     /  /     \  \
          AC EF  HIJ  LM  OP   RST  WX

  Is this the Final Tree Correct?

2 个答案:

答案 0 :(得分:0)

如果分支因子是3,那是不是指非根节点中的最小键数?初始树如何正确?

初始状态为:

└── E, I, N, S
    ├── A, C, D
    ├── F, G, H
    ├── K, L, M
    ├── O, P, R
    └── T, V, W, X

答案 1 :(得分:0)

不,最后的B树不正确。中间的是。最后一个应该是这样的

                  [K]
               /      \
              /        \
             /          \     
           [D][G]    [N][R][V]
         /  /  /     /  / \  \
        /  /  /     /  /   \  \
       /  /  /     /  /     \  \
      AC EF  HIJ  LM  OPQ   ST  WX

你错过了一些非常重要的事情。在B树中,插入仅在叶节点中完成,并且路上的每个完整节点都是分开的。您在最终树的第2级节点中插入了Q

编辑:我认为您对插入算法感到困惑。插入仅发生在叶节点中。在从根到叶的向下路径中,如果遇到任何完整节点,则首先拆分它。如果叶节点已满,则首先将其拆分,然后插入密钥。在您的情况下,叶节点OPRST将在遇到时被拆分,因为它有5个节点且已满。因此R将向上移动,并且将创建包含键ST的新叶节点。旧的叶子节点现在只有OP个密钥。然后将QR进行比较,搜索向左移动到最终插入OP的{​​{1}}节点。