そのため、2-3 ツリーで正しい先祖を見つけるのに苦労しています。任意の高さの 2 ~ 3 ツリーでは、いくつかのケースを探す必要があります。
私のノードは次のように設計されています。
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 ツリーを順番に走査する反復子を作成することです。祖先ノードを見つける目的は、祖先ノードが、その親ノードの正しい子であるリーフ ノードの順序どおりの後継ノードになることです。繰り返しますが、上記の例のように。