4

二分木で線形順序トラバーサルを実行しようとしていますが、正しい出力が得られません。基本的に、キューを作成し、ルートをエンキューすることから始めます。キューが空になるまで、最初の要素をデキューし、その子をキューの最後に追加します。デキューすると、汎用要素 () が返されます。次のステップで子をキューの最後にエンキューできるように、この要素をツリー ノードに変換する際に問題があります。これまでに行ったことは次のとおりです。

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());
        }
    }
}

BTPosition と NodeQueue の API は、http: //net3.datastructures.net/doc4/index.html?net/datastructures/ にあります。

どんな提案も本当に感謝しています..

4

1 に答える 1

4

キューのタイプを。にする必要がありますBTPosition<E><E>たとえばInteger、またはStringBTPositionバイナリツリーの実際のノードのように見えます。

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());
        }
    }
}
于 2012-02-02T06:57:26.720 に答える