2017-04-13 45 views
0

我是新來的樹,我在下面附加的代碼有問題,當我打印出樹時,我的算術符號顯示爲0。我必須創建一個二進制表達式樹,它將表達式2 + 4 - 3存儲在java中

任何人都可以看到這段代碼?謝謝!

這裏是我的節點類:

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

這裏是我的測試類:

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

我的輸出應該如下。

輸出:

2 0 4 0 3 
+0

你不使用「node.data1」,這是保存字符屬性。 –

+0

請注意,我們通常對於(+, - )或(*,/)等等的距離運算符從左到右進行計算。所以評估順序是(2 + 4)-3。在樹上,我們首先倒塌葉子,那麼根就會 - 然後。但我並不深入樹木,也許有一種解決這種樹木的替代方式,你的方法很好。 –

回答

2

你是存儲在data1+/-但打印你總是調用data默認情況下爲0,您可以檢查data1如果null的基礎上,你可以打印datadata1

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