Ich arbeite an einer BST, die Knoten nach ihren Treffern und ihren Elementen ausgleichen wird, wobei ein Treffer ein Attribut ist, das zunimmt, wenn ein Knoten gefunden wird mit find(), contains() usw. Die Wurzel des Baums ist der Knoten mit der höchsten Anzahl von Treffern. Mein gesamter Code ist in Ordnung, außer der Balance-Methode, die den Baum ausbalanciert, nachdem ich einen Treffer erhöht habe. Ich benutze modifizierte AVL Tree rotieren Methoden (https://users.cs.fiu.edu/~weiss/dsj2/code/weiss/nonstandard/Rotations.java), wo ich nicht die Elemente, sondern die Treffer eines Knotens vergleichen. mein Code Ich kann es nicht egal zu arbeiten, was ich versuche, ich kann nicht der Baum richtig Hier Gleichgewicht erhalten, ist so weit:Binary Search Tree Balance
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;
}
Im Moment der Balance Methode löscht einfach den Knoten seiner sollte rotieren, ich habe versucht, es zu debuggen, konnte aber nicht sehen, was falsch ist.
Die Zuweisungen zu 'node' in' balanceTree' führen zu nichts. Dies könnte ein Duplikat von http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value sein. – ajb
Zu welcher Seite soll es rotieren? Wenn es größer als links oder rechts ist, rotiert es den Nachbarknoten und eine unendliche Schleife (zB was ist das Gleichgewicht, ist das nicht eine Listenimplementierung am Ende, die nach hitCount sortiert ist? [Hinweishinweis]) – n247s
@ajb Wie hilft der angegebene Link in diesem Fall? Der OP kennt den Mechanismus, hat aber nicht die richtigen Zuordnungen. – n247s