ヒットとその要素に応じてノードのバランスを取る BST に取り組んでいます。ヒットとは、find()、contains() などを使用してノードが見つかったときに増加する属性です。ツリーのルートはノードです。ヒット数が最も多い。ヒットをインクリメントした後にツリーのバランスを取る balance メソッドを除いて、私のコードはすべて問題ありません。変更された AVL ツリーの回転メソッド ( https://users.cs.fiu.edu/~weiss/dsj2/code/weiss/nonstandard/Rotations.java ) を使用しています。ここでは、要素ではなく、ヒット数を比較します。ノード。何を試しても機能しません。ツリーを正しくバランスさせることができません。これまでのコードは次のとおりです。
public void balanceTree() {
balanceTree(root);
}
private void balanceTree(Node node) {
if (node.left.getHits() <= node.getHits() && node.right.getHits() <= node.getHits()) {
return;
} else if (node.left.getHits() > node.getHits()) {
node = rotateWithLeftChild(node);
} else if (node.right.getHits() > node.getHits()) {
node = rotateWithRightChild(node);
}
}
static Node rotateWithLeftChild(Node k2) {
Node k1 = k2.left;
k2.left = k1.right;
k1.right = k2;
return k1;
}
static Node rotateWithRightChild(Node k1) {
Node k2 = k1.right;
k1.right = k2.left;
k2.left = k1;
return k2;
}
現在、balance メソッドは、回転するはずのノードを削除するだけです。デバッグを試みましたが、何が問題なのかわかりませんでした。