나는 임의의 2 진 검색 트리의 깊이 우선 검색을 생성하기위한 간단한 코드 스 니펫을 가지고있다.왜이 Depth-first 검색은 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를 얻지 말아야한다. 그래서 왜 이런 일이 일어나고 있는지 모르겠다. 노드 중 하나도 Null 컨텐츠가 없습니다.
또한 흥미롭게도 while 조건을 while(current != null)
으로 변경하면 NPE가 표시되지 않지만 출력은 F B G A D I
이며 마지막 레벨 요소가 누락되었습니다.
내가 간결한 뭔가가있을 것이라고 확신합니다 ... 힌트가 있습니까?
편집 : 런 어웨이 세미콜론 = (감사합니다, 로저
가장 좋은 방법은 디버거를 사용하여 코드를 단계별로 실행하는 것입니다. –
마지막'current = queue.peek();'는 중복되어야합니다. –
@PeterLawrey Lawrey : 죄송합니다. 손으로 일부 디버깅을 시도하고 제거하는 것을 잊었습니다. – user991710