JavaでAVLツリーを作成しようとしていますが、これを2泊続けています。次のコードを実行すると、確実にローテーションが実行されますが、たとえばleftRotateという最終結果は、ノードを失っていることです。AVLツリーノードを回転するとノードが消えます
public AVLNode leftRotate(AVLNode node){ //receives the grandparent node
AVLNode temp = node.right;
node.right = temp.left;
temp.left = node;
return temp;
}
public AVLNode rightRotate(AVLNode node){
AVLNode temp = node.left;
node.left = temp.right;
temp.right = node;
return temp;
}
public AVLNode rightLeftRotate(AVLNode node){
node.right = rightRotate(node.right);
return leftRotate(node);
}
public AVLNode leftRightRotate(AVLNode node){
node.left = leftRotate(node.left);
return rightRotate(node);
}
私は左右の回転方法にroot = temp
を追加する場合は、回転して、新しいディスプレイは、まず周りに行くと、物事はすべてが混ざってもらうだけのために成功裏に行われます。
例:4,5、および6を挿入します。temp
は、 "root"として5を保持します.4と6は、その左右の子のキーとして正しく含まれています。しかし、メソッドの終了後、これはすべて消え、ツリーのルートの左と右の子はnullになります。
私はそれが私が行方不明であることを知っていますが、私はそれの周りに私の頭を包むことはできません。
私もaddNode
の機能ではないことは知っています。すべてのノードの追加が終了した時点で、結果のツリーはバイナリ検索ツリーになります。これらの関数を呼び出してノードを失い始めるときだけです。どんな助け?
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Oleg