2012-08-11 38 views
2

我的任务是创建一棵2-3树。我已经完成了必要的所有必要的课程和方法,但是我的拆分方法存在困难。我可能已经过度地表达了这种想法,而我的脑袋正在旋转,我似乎无法摆脱自己陷入的思路。2-3树 - 分裂难度

如果我只需要分裂一个叶节点,我就没有问题。我的思想似乎被卡住的地方是我必须拆分叶节点,然后拆分上面的父节点。根据我的理解,分开孩子,然后分开,然后连接孩子将根据哪个孩子最初分裂而有所不同。

即,如果我有以下树,我的第一个分裂发生在叶节点(比如根的第二个孩子的第三个孩子13 | 14)。这种分裂的过程与说根的第三个孩子(19,20)的第一个孩子不同。

          9 |18 
      3 | 6       12 | 15       21 | 24 
1 | 2 4 | 5 7 | 8  10 | 11 13 | 14 16 | 17  19 | 20 22 | 23 25 |26 

,我有问题我的分裂法的部分是:

if (upperRight != null) 
    { 
     if (childIndex == 0) 
     { 
      parent.connectChild(1, newRight); 
      newRight.connectChild(0, child1); 
      newRight.connectChild(1, child2); 
     } 
     else if (childIndex == 1) 
     { 
      upperRight.connectChild(0, newRight); 
     } 
     else if (childIndex == 2) 
     { 
      upperRight.connectChild(0, newRight); 
     } 
    } 
    else 
    { 
     Node temp = parent.disconnectChild(1); 
     parent.connectChild(1, newRight); 
     parent.connectChild(2, temp); 

     if (childIndex == 0) 
     { 
      temp = newRight.disconnectChild(0); 
      newRight.connectChild(0, child1); 
      newRight.connectChild(1, child2); 
      newRight.connectChild(2, temp); 
     } 
     else if (childIndex == 1) 
     { 
      thisNode.connectChild(1, child1); 
      newRight.connectChild(1, child2); 
     } 
     else if (childIndex == 2) 
     { 
      temp = newRight.disconnectChild(0); 
      thisNode.connectChild(1, child1); 
      newRight.connectChild(0, child2); 
      newRight.connectChild(1, temp); 
     } 
    } 
    return newRight; 

如果有人可以帮助我直接就如何看待这个区别我将不胜感激。我收到的输出要么是我的孩子以不正确的顺序,要么是我覆盖了一些孩子,或者两者都有。

回答

0

在Robert Sedgwich的算法的Balanced Search Trees中讨论了使用四节点来帮助分裂的技术。