почему мой поворот дерева не отображает правильное значение

#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() инструкций, чтобы увидеть, что происходит, — лучшее место для начала, когда вы получаете неожиданные результаты.