我有一小段程式码,产生一个深度优先搜索任意二叉搜索树的。这是我的代码:为什么这个深度优先搜索产生一个NullPointerException?
public void printByDepth()
{
Queue<BinaryNode<T>> queue = new LinkedList<BinaryNode<T>>();
BinaryNode<T> current = this;
queue.add(current);
while(!queue.isEmpty()){
current = queue.remove();
System.out.println(current.element);
if(current.left != null)
queue.add(current.left);
if(current.right != null) // had an extra semicolon here, fixed
queue.add(current.right);
}
}
这是一个相当标准的队列的方式,但由于某种原因8号线(println(current.element)
)产生NPE。我正在使用的树应该产生以下DF输出:F B G A D I C E H
。我这样做究竟在纸上,我从来不应该让电流= null或queue.isEmpty()我已经(至少在这种情况下)遍历整个树之前=真,所以我不知道为什么会这样。没有节点有空的内容。
另外,有趣的是,如果我将条件改为while(current != null)
,我没有得到NPE,但输出是:F B G A D I
,它缺少最后一级的元素。
我敢肯定有一些简单的我失踪...任何提示?
编辑:逍遥分号=(谢谢你,罗杰
最好的办法是通过与调试器的单步执行代码。 –
最后一个'current = queue.peek();'应该是多余的。 –
@PeterLawrey Lawrey:哎呀,它是。我试图手动进行一些调试,并忘记将其删除。 – user991710