#java #data-structures #avl-tree
Вопрос:
Первоначально, когда я напечатал значение в предварительном заказе, я получил 30 20 10. Когда я перебалансирую дерево, все, что я получаю, — это 30. дерево не восстанавливает равновесие. как я могу это исправить. Я ценю вашу помощь. Когда я использовал другие источники, мой код был похож на их, но по какой-то причине код не работал для меня.
AvlTrees obj = new AvlTrees();
obj.insert(30);
obj.insert(20);
obj.insert(10);
obj.preOrder();
public class AvlTrees {
private class AvlNode{
AvlNode leftChild;
AvlNode rightChild;
int value;
int height;
public AvlNode (int value){
this.value = value;
}
}
private AvlNode root;
public AvlNode insert (int value){
return root = insert(root, value);
}
private AvlNode insert(AvlNode root, int value) {
if (root == null)
return new AvlNode(value);
if (value < root.value) {
root.leftChild = insert(root.leftChild, value);
} else
root.rightChild = insert(root.rightChild, value);
setHeight(root);
if(balanceFactor(root)==2 amp;amp; balanceFactor(root.leftChild)==1){
LLRoatation(root);}
return root;
}
public int height(){
return height(root);
}
private int height (AvlNode root){
return root == null ? -1 : root.height;
}
public void setHeight (AvlNode root){
root.height = 1 Math.max((height(root.leftChild)), height(root.rightChild));
}
private AvlNode LLRoatation(AvlNode y){
AvlNode x = y.leftChild;
y.leftChild = x.rightChild;
x.rightChild = y;
setHeight(x);
setHeight(y);
return x;
}
private int balanceFactor (AvlNode root){
return root == null ? 0 : height(root.leftChild) - height(root.rightChild);
}
private void traverseInOrder (AvlNode root){
if (root == null)
return;
traverseInOrder(root.leftChild);
System.out.println(root.value );
traverseInOrder(root.rightChild);
}
Комментарии:
1. Вы провели какую-нибудь отладку? Добавление
print()
инструкций, чтобы увидеть, что происходит, — лучшее место для начала, когда вы получаете неожиданные результаты.