AVL ツリーを実装しようとしていますが、各ノードの親を挿入して追跡する最良の方法がわかりません。これは教育的なものなので、「ブーストを使用する」ことを提案しないでください:)
これはコンパイルされますが、その正確性や最善の方法であるとは確信していません。具体的にはこれ
insert(someNumber,root,root);
また、リバランスしてツリーを上に移動するときに、高さの部分をやり直します。
このように挿入します
myTree.insert(someNumber);
これが方法です。ここで 2 番目のパラメーターを何にすべきかわかりません。私は NULL だと思っていたでしょうが、コンパイラはそれを好みません (関数定義が異なります)。
void Tree::insert(int someNumber){
insert(someNumber,root,root);
}
ここに私のインサートがあります
void Tree::insert(int someNumber,Node*& subTreeRoot,Node*& parent){
if(subTreeRoot==NULL)
{
subTreeRoot = new Node(someNumber,parent);
if(subTreeRoot->myParent)
}
else if (someNumber<subTreeRoot->myNumber)
{
if((subTreeRoot->right==NULL)||((subTreeRoot->left!=NULL)&&(subTreeRoot->right!=NULL)))
subTreeRoot->height++;
insert(someNumber,subTreeRoot->left,subTreeRoot);
}
else
{
if((subTreeRoot->left==NULL)||((subTreeRoot->left!=NULL)&&(subTreeRoot->right!=NULL)))
subTreeRoot->height++;
insert(someNumber,subTreeRoot->right,subTreeRoot);
}
}
-