如何使用必要的括号从二进制表达式树中打印中缀?

时间:2016-11-14 15:16:20

标签: java binary-tree infix-notation

我正在从二叉树中打印中缀表达式。但是我可以用完全括号的形式显示表单,但问题是要求只打印必要的括号。

例如,考虑表达式7 2 8 - - 9 3 * +。后缀表单可以完全括号打印:

((7 - (2 - 8)) + (9 * 3))

或者可以打印必要的括号:

7 - (2 - 8) + 9 * 3

我编码的是......

public Node root;

public void infix() {
    infix(root);
}

public void infix(Node r) {
    if (r != null) {
        if (r.left != null && r.right != null) {  //Check if it is a leaf
            System.out.print ("(");
        }
        infix(r.left);
        System.out.print(r.data);
        infix(r.right);
        if (r.left != null && r.right != null) {  //Check if it is a leaf
            System.out.print (")");
        }
    }
}

但我不知道该怎么做。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

为此你需要'优先级'的概念。当前的运营商。例如,在根目录或当前运算符为+-时,级别为0,但当前运算符为*/时,级别为1.您需要将当前级别作为参数添加到递归方法中。然后,当内部运算符(例如+)的优先级低于外部运算符(例如*)时,您知道需要括号。