0

我正在尝试使用中序遍历(在 java 中)打印出二叉树,但没有任何歧义。

我从后序符号输入创建了树。

例如,输入 = 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
        }
    }

这是我第一次使用 Stack Overflow,如果我没有正确发布,请放轻松:)

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 回答