0

順序通りのトラバーサル (Java) を使用してバイナリ ツリーを出力しようとしていますが、あいまいさはありません。

ポストオーダー表記入力からツリーを作成しました。

たとえば、input = 2 3 4 * - 5 + 次に、ツリーを作成し、順序通りのトラバーサルを使用して出力したいと考えています。

したがって、出力は = 2 - (3*4) + 5 である必要があります。

私の質問は、基本的な BinaryNode および BinaryTree クラスに干渉することなく、自分のドライバー クラスを変更するだけで、思い通りに出力を印刷できるかということです。もしそうなら、どうすればこれを行うことができますか?

printInOrder メソッド (BinaryNode クラス内) を変更することによってのみこれを行うことができる場合、これまでのところ次のようになります。

public void printInOrder()
    {
        if (left != null)
        {
            left.printInOrder();            // Left
        }
        System.out.print(element);       // Node
        if (right != null)
        {
            right.printInOrder();           // Right
        }
    }

スタック オーバーフローに参加するのはこれが初めてです。正しく投稿していない場合は、ご容赦ください :)

4

1 に答える 1

0

私はそれを理解したので、例えば、23+4+5* の入力は (((2+3)+4)*5) の出力を与えます。

以下のコードを参照してください。

//NOTE: printInOrder has been modified to exclude ambiguity
public void printInOrder()
{
    if (left != null)
    {
        if (height(left)== 0)
        {
            //when we reache the bottom of a node, we put a bracket around each side as we know this will have it's own operation
            // eg:  *
            //     / \
            //    3   4
            System.out.print("("); 
            left.printInOrder();            // Left
        }
        else
        {
            // We also put in a bracket here as this matches the closing brackets to come (which we do not know about yet)
            System.out.print("(");
           left.printInOrder();            // Left 
        }

    }
      System.out.print(element);                // Node
    if (right != null)
    {
        if (height(right) == 0)
        {
            //when we reache the bottom of a node, we put a bracket around each side as we know this will have it's own operation
            // eg:  *
            //     / \
            //    3   4
            right.printInOrder();           // Right
            System.out.print(")");
        }
        else
        {
            right.printInOrder();           // Right
           // System.out.print(")"); // this print statement actually isnt necessary
        }

    }
}
于 2013-03-09T17:24:22.283 に答える