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