私は、任意のバイナリ検索ツリーの深さ優先探索を行うコードの短い断片を持っています。これは私のコードです:この深さ優先検索で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
。私はこれを正確に紙でやったことがあります。なぜ、これが起こっているのかわからないので、ツリー全体(この場合は少なくとも)を横断する前に、current = nullまたはqueue.isEmpty()= trueにするべきではありません。いずれのノードもヌル・コンテンツを持たない。
さらに興味深いことに、while条件をwhile(current != null)
に変更すると、NPEは取得されませんが、出力はF B G A D I
です。最後のレベルの要素がありません。
私は確信しているが、私は欠けている何か簡単な...任意のヒント?
EDIT:暴走セミコロン=(おかげで、ロジャー
あなたの最善の策は、デバッガでコードをシングルステップにあります。 –
最後の 'current = queue.peek();'は冗長でなければなりません。 –
@PeterLawrey Lawrey:おっと、そうです。手でデバッグしようとしましたが、削除するのを忘れてしまいました。 – user991710