在2-3树中找到正确的祖先

时间:2016-04-13 03:36:09

标签: c++ algorithm tree ancestor 2-3-tree

所以我在2-3树中找不到正确的祖先。在任意高度的2-3树中,有几种情况需要寻找。

enter image description here

我的节点设计如下:

template<typename DataType>
struct node{
   Node<DataType> *child1; //left-child
   Node<DataType> *child2; //middle-child (3-node only)
   Node<DataType> *child3; //right-child
   Node<DataType> *extraChild; //for splitting purposes

   Node<DataType> *parent;

   DataType key1; //key1 <= key2
   DataType key2; //key2 <= extraKey (only when node needs to be split)
   DataType extraKey; //for splitting purposes
};

是否有算法或类似的东西可以找到节点的正确祖先?

例如,假设我们正在寻找H的祖先(所提供的树的底部),从视觉角度来看很明显,H的祖先是树的根部的H.但这需要跳过4个父链接。树可以是任意大小,这是问题。

我的目标最终是创建一个迭代器,按顺序遍历2-3树。查找祖先节点的目的是祖先节点将是叶节点的有序后继节点,叶节点是其父节点的右子节点。同样,如上面提供的示例。

1 个答案:

答案 0 :(得分:2)

如果目标只是按顺序遍历2-3树,那么你只需要编写一个从根开始的递归函数。

算法如下:

View

Algorithm taken from this link.