ヒットとその要素に応じてノードのバランスを取るBSTに取り組んでいます。ヒットは、find()、contains()などを使ってノードを見つけたときに増加する属性です。 ツリーのルートはヒット数が最も多いノードです。 ヒットをインクリメントした後にバランスを取るバランスメソッド以外のコードはすべて問題ありません。 修正されたAVL Tree rotateメソッド(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;
}
今のバランス方法は、単純にノードのを削除します回転するはずですが、私はそれをデバッグしようとしましたが、何が間違っているのか分かりませんでした。
'balanceTree'の' node'への割り当ては何も成立しません。これはhttp://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-valueの複製である可能性があります。 – ajb
回転させる側は?左または右のいずれか大きい場合、それは隣のノードを回転させ、無限ループはありませんか?(例えば、残高は最終的にはリストの実装ではなく、hitCountでソートされます)[ヒントヒント] – n247s
@ajbこの場合、提供されたリンクはどのように役立ちますか? OPはメカニズムを知っていますが、適切な割り当てはありません。 – n247s