2017-04-13 59 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); 
}