我正在尝试使用按顺序遍历(在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
}
}
这是我第一次使用Stack Overflow,如果我没有正确发布,请继续使用:)
答案 0 :(得分: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
}
}
}