我正在从二叉树中打印中缀表达式。但是我可以用完全括号的形式显示表单,但问题是要求只打印必要的括号。
例如,考虑表达式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 (")");
}
}
}
但我不知道该怎么做。有人可以帮帮我吗?
答案 0 :(得分:0)
为此你需要'优先级'的概念。当前的运营商。例如,在根目录或当前运算符为+
或-
时,级别为0,但当前运算符为*
或/
时,级别为1.您需要将当前级别作为参数添加到递归方法中。然后,当内部运算符(例如+
)的优先级低于外部运算符(例如*
)时,您知道需要括号。