2012-02-02 3 views
4

이진 트리에서 선형 순서 탐색을 시도하지만 올바른 출력을 얻는데 어려움이 있습니다. 기본적으로 큐를 생성하고 루트를 큐에 넣고 시작한 다음 큐가 비어있을 때까지 첫 번째 요소를 큐에서 제거하고 자식을 큐 끝에 추가합니다. dequeuing하면 일반 요소()가 반환됩니다. 이 요소를 트리 노드로 변환 할 때 문제가있어서 다음 단계에서 자식을 큐의 끝에 대기시킬 수 있습니다. 여기에 지금까지 수행 한 작업은 다음과 같습니다레벨 순서 순회를 수행하는 방법?

답변

4

.. BTPosition 및 NodeQueue에 대한

public void levelOrderTraversal() 
{ 
    NodeQueue<E> queue = new NodeQueue<E>(); 
    BTPosition<E> current = root; 
    queue.enqueue(current.element()); 
    E temp = null; 

    while(!queue.isEmpty()) 
    { 
     temp = queue.dequeue(); 
     System.out.println(temp.toString()); 
     current.setElement(temp); 

     if (hasLeft(current)) 
     { 
      queue.enqueue(left(current).element()); 
     } 
     if (hasRight(current)) 
     { 
      queue.enqueue(right(current).element()); 
     } 
    } 
} 

API가 http://net3.datastructures.net/doc4/index.html?net/datastructures/

어떤 제안 정말 감사합니다에서 찾을 수 있습니다 당신은 대기열 유형이어야 할 것이다 BTPosition<E>. <E>은 단순히 객체 유형입니다 (예 : Integer 또는 String). BTPosition은 이진 트리의 실제 노드 인 것처럼 보입니다.

public void levelOrderTraversal() 
{ 
    NodeQueue<BTPosition<E>> queue = new NodeQueue<BTPosition<E>>(); 
    BTPosition<E> current = root; 
    queue.enqueue(current); 

    while(!queue.isEmpty()) 
    { 
     current = queue.dequeue(); 
     System.out.println(temp.element().toString()); 

     if (current.getLeft() != null) 
     { 
      queue.enqueue(current.getLeft()); 
     } 
     if (current.getRight() != null) 
     { 
      queue.enqueue(current.getRight()); 
     } 
    } 
} 
관련 문제