1

教育目的で AVL ツリーを実装しようとしていますが、期待どおりにローテーションが機能しません。

それぞれが左、右、および親ノードへのポインターを持つノードがあります。

以下は、右から右への回転のコードです。まず、インプット(明確にするために、これがRRケースであると私が理解していることです)

a
  \
   b
    \
     c

ローテーションを行うコードは

if (subTreeRoot == root) {
  this->root=subTreeRoot->right;
}
else { // not resetting at root
  subTreeRoot->right->myParent = subTreeRoot->myParent;      
  subTreeRoot->myParent->right = subTreeRoot->right;           
}
subTreeRoot->right->left = subTreeRoot;
subTreeRoot->right = NULL;  
subTreeRoot->height = 1;   
return;

これは実際に機能します。a がルートでない場合でも機能します。

失敗しているテストケースは dcbae のようなものです

この場合、回転させてから、何か他のものを差し込んでいきます。

帰って見ようと思った

http://www.cse.ohio-state.edu/~sgomori/570/avlrotations.html

しかし、最初に、かろうじて外れたり、遠く離れたりしていないことを確認したかったのです。

4

0 に答える 0