У меня есть небольшой фрагмент кода, чтобы произвести поиск в глубину произвольного двоичного дерева поиска. Это мой код:
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
. Я сделал это точно на бумаге, и я никогда не должен получать current = null или queue.isEmpty () = true, прежде чем я пройдусь по всему дереву (по крайней мере, в этом случае), поэтому я не уверен, почему это происходит. Ни один из узлов не имеет нулевого содержимого.
Кроме того, интересно, что если я изменю условие while на while(current != null)
, я не получу NPE, но получится: F B G A D I
, в нем отсутствуют элементы последнего уровня.
Я уверен, что что-то простое мне не хватает ... какие-нибудь намеки?
РЕДАКТИРОВАТЬ: убегая точка с запятой = (Спасибо, Роджер.