2013-03-06 2 views
0

Je tente d'imprimer une arborescence binaire en utilisant la traversée in-order (in java), mais sans ambiguïté. J'ai créé l'arbre à partir d'une entrée de notation post-ordre. Par exemple, input = 2 3 4 * - 5 + Je crée ensuite l'arbre, et je veux l'imprimer en utilisant la traversée en ordre. Donc la sortie doit être = 2 - (3 * 4) + 5 Cependant, l'utilisation de la traversée dans l'ordre ne me donne évidemment pas les parenthèses de séparation.Impression d'une arborescence binaire à l'aide de la traversée InOrder sans ambiguïté

Ma question est, puis-je imprimer la sortie comme je le souhaite, sans interférer avec les classes de base BinaryNode et BinaryTree, mais en changeant seulement ma classe de pilote? Et si oui, comment pourrais-je faire cela?

Si je ne peux le faire en changeant ma méthode de printInOrder (dans la classe BinaryNode), voici ce qu'elle ressemble à ce jour:

public void printInOrder() 
    { 
     if (left != null) 
     { 
      left.printInOrder();   // Left 
     } 
     System.out.print(element);  // Node 
     if (right != null) 
     { 
      right.printInOrder();   // Right 
     } 
    } 

Ceci est ma première fois sur Stack Overflow, aller simple sur moi si je n'ai pas posté correctement :)

Répondre

0

Je l'ai compris, donc par exemple, une entrée de 23 + 4 + 5 * donnera une sortie de (((2 + 3) +4) * 5)

code Voir ci-dessous:

//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 
     } 

    } 
} 
Questions connexes