2012-02-02 10 views
4

私はバイナリツリー上で線形オーバトラバーサルをしようとしていますが、正しい出力を得るのには問題があります。基本的に私はキューを作成し、ルートをキューに入れて開始し、キューが空になるまで最初の要素をデキューし、その子をキューの最後に追加します。デキューするときは、ジェネリック要素()を返します。この要素をツリーノードに変換する際に問題があるため、次のステップで子ノードをキューの最後にエンキューできます。ここで私がこれまで行っているものです:レベルオーダートラバーサルを行う方法は?

答えて

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()); 
     } 
    } 
} 
関連する問題