发生的事情是,每次我声明新的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();
}
答案 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
。