2017-04-13 5 views
0

Je suis nouveau aux arbres et ai des problèmes avec le code ci-joint, quand j'imprime l'arbre, mes symboles arithmétiques affichent comme 0's.Je dois créer un arbre d'expression binaire qui stocke l'expression 2 + 4 - 3 en java

Quelqu'un pourrait-il nous éclairer sur ce morceau de code? Merci!

Voici ma classe de noeud:

class Node 
{ 

    Node left; 
    Node right; 
    int data; 
    char data1; 

    Node(int newData) 
    { 
     left = null; 
     right = null; 
     data = newData; 
    } 
    Node(char newData) 
    { 
     left = null; 
     right = null; 
     data1 = newData; 
    } 
} 

Voici ma classe de test:

public class Ex23d 

    { 
    public static void main(String[] args){ 

    Node root = new Node('+'); 
     root.left = new Node(2); 
     root.right = new Node('-'); 
     Node r2 = root.right; 

     r2.left = new Node(4); 
     r2.right = new Node(3); 

     printTree(root); 
    } 
    public static void printTree() 
    { 
     printTree(); 
     System.out.println(); 
    } 
    public static void printTree(Node node) 
    { 
     if (node == null) return; 

     printTree(node.left); 
     System.out.print(node.data + " "); 
     printTree(node.right); 
    } 
} 

Ma sortie devrait ressembler à ceci.

Sortie:

2 0 4 0 3 
+0

vous ne l'utilisez « node.data1 » qui est la propriété qui contient les caractères. –

+0

Notez que nous évaluons normalement de gauche à droite pour les opérateurs à distance égale comme (+, -) ou (*, /). L'ordre d'évaluation est donc (2 + 4) -3. Dans les arbres, nous effondrons les feuilles d'abord, donc la racine serait - alors. Mais je ne suis pas au fond des arbres, peut-être y a-t-il une manière alternative de résoudre un tel arbre, où votre approche est bonne. –

Répondre

2

vous stockez +/- à data1 mais lors de l'impression que vous appelez toujours data qui est par défaut 0. Vous pouvez vérifier si data1null, sur la base que vous pouvez imprimer soit data ou data1

1

vous n'utilisez pas ".data1" qui est la propriété qui contient les caractères.

essayez ceci:

public static void printTree(Node node) 
{ 
    if (node == null) return; 
    printTree(node.left); 
    if(node.data == 0){ 
     System.out.print(node.data1 + " "); 
    }else{ 
     System.out.print(node.data + " "); 
    } 
    printTree(node.right); 
}