我在插入AVL类时遇到问题

时间:2018-09-22 08:12:15

标签: java

发生的事情是,每次我声明新的AVLTree时,将变量parent设置为null时,我的变量parent都会一直设置为null。我将print语句放在insert方法上,以检查父级是否已更改或保持为空。

public class AVLTree < T extends Comparable< T >> extends BinaryTree< T >{

   private int balance ;

   private AVLTree<T> parent;

   public AVLTree(T item){

      this(item,null);
   }

   public AVLTree(T item, AVLTree<T> parent){

      super(item);

      this.balance = 0;

      this.parent = parent;
   }

   public AVLTree<T> insert(T item){

      if(this.item.compareTo(item) < 0){
     if(this.left != null){     
            this.left.insert(item);
     }
      else{
        this.left= new AVLTree<T>(item, this);
        System.out.println("parent key " + this.parent.item);
      }
      }
      else{
     if(this.right != null){
            this.right.insert(item);
     }
     else{ 
        this.right = new AVLTree<T>(item, this);
        System.out.print("parent key " + this.parent.item);     
     }
      } 
      return rotations();      

   }

1 个答案:

答案 0 :(得分:0)

您的问题不是特别清楚,但是如果我理解正确的话:调用new AVLTree<T>(item, this)不会也不应更改this.parent

它将创建一个新的AVLTree,并且 parent将是this,因为构造函数中的this是指正在构造的实例,而不是呼叫者。

即之后

this.left= new AVLTree<T>(item, this);

您会看到this.left.parent == this没有 this.parent == this