2013-03-06 4 views
0

Я пытаюсь распечатать двоичное дерево, используя обход в порядке (в java), но без какой-либо двусмысленности.Печать двоичного дерева с использованием обхода InOrder без двусмысленности

Я создал дерево из ввода ввода после заказа.

Например, 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 
     } 
    } 

Это мой первый раз на переполнение стека, легко перейти на я, если я не публиковал правильно :)

ответ

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 
     } 

    } 
}