Java 遍历AVL树
我已经实现了一个AVL树,我想写一个迭代器,可以按预先的顺序进行搜索。我有这种代码的和平,我总是在“stack.push(current)”中得到一个空指针,不知道为什么Java 遍历AVL树,java,avl-tree,Java,Avl Tree,我已经实现了一个AVL树,我想写一个迭代器,可以按预先的顺序进行搜索。我有这种代码的和平,我总是在“stack.push(current)”中得到一个空指针,不知道为什么 @Override public Iterator<E> iterator() { return new Iterator<E>(){ Node current; int counter; Stack<Node> stack;
@Override
public Iterator<E> iterator() {
return new Iterator<E>(){
Node current;
int counter;
Stack<Node> stack;
public void iterator() {
counter++;
stack = new Stack<Node>();
current = root;
stack.empty();
}
@Override
public boolean hasNext() {
if(counter == count(root)) return false;
else return true;
}
@Override
public E next() {
stack.push(current);
counter++;
if(current.left.value != null) return current.left.value;
else return current.right.value;
}
};
}
@覆盖
公共迭代器迭代器(){
返回新的迭代器(){
节点电流;
整数计数器;
堆叠;
公共无效迭代器(){
计数器++;
堆栈=新堆栈();
电流=根;
stack.empty();
}
@凌驾
公共布尔hasNext(){
if(counter==count(root))返回false;
否则返回true;
}
@凌驾
公共教育{
堆栈推送(当前);
计数器++;
如果(current.left.value!=null)返回current.left.value;
否则返回current.right.value;
}
};
}
事先感谢:)您的
根对象从未声明或实例化过。您正在设置current=root但是在当前上下文中,root
什么都不是
public void iterator() {
counter++;
stack = new Stack<Node>();
current = root;
stack.empty();
}
public void迭代器(){
计数器++;
堆栈=新堆栈();
电流=根;
stack.empty();
}
当前值=根的可能重复项代码>?根在哪里被实例化了?这只是我整个代码的一部分。在我的代码开始时,我实例化了根即使我在迭代器中实例化根并给他根或null的值,我也会得到一个null指针。我可以在方法中写入他,但是我应该使用哪个值呢?