2017-04-13 3 views
0

私はツリーに新しく、以下のコードに問題があります。ツリーを印刷すると、算術記号が0の。Javaで式2 + 4 - 3を保存するバイナリ式ツリーを作成する必要があります

誰でもこのコードを理解していただけますか?ありがとう!

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); 
    } 
} 

私の出力は以下のようになります。

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

はここに私のテストクラスです:

は、ここに私のノードクラスです。

出力:

2 0 4 0 3 
+0

あなたは文字を保持しているプロパティである「node.data1」を使用していません。 –

+0

通常、(+、 - )または(*、/)のような等しい範囲の演算子については、左から右へ評価します。したがって、評価順序は(2 + 4)-3です。木々では、最初に葉を崩壊させるので、根は - そうです。しかし、私は木の深いではない、多分あなたのアプローチがうまくそのような木を解決するalternativの方法があります。 –

答えて

2

あなたはどちらかdataを印刷できることに基づいて、data1+/-を保存するが、あなたは常にあなたがdata1場合nullを確認することができ、デフォルトは0であるdataを呼び出している印刷中にしていますまたはdata1

1

あなたは文字を保持するプロパティである".data1"を使用していません。

はこれを試してみてください。

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); 
} 
関連する問題