Java 我的树节点的NullPointerException

Java 我的树节点的NullPointerException,java,recursion,binary-tree,treenode,Java,Recursion,Binary Tree,Treenode,这是我的treenode的结构 class Node{ int value; Node left; Node right; public Node(int val){ this.value=val; } } 总而言之:我尝试构建一棵树。根是10,我尝试添加一个值为4的左子树 Node sub=new Node(10); sub.left.value=4; // line 1 sub.left=new Node(4)

这是我的treenode的结构

class Node{
    int value;
    Node left;
    Node right;
    public Node(int val){
        this.value=val;
    }
}
总而言之:我尝试构建一棵树。根是10,我尝试添加一个值为4的左子树

Node sub=new Node(10);
    sub.left.value=4;     // line 1
    sub.left=new Node(4); // line 2

为什么第1行不起作用而第2行起作用?

在声明或构造函数中都没有初始化。因此,当您调用
sub.left.which
时,您会得到一个NPE,因为
sub.left
在该点为空

重新排列第1行和第2行将有所帮助

为什么2号线可以独立工作


请注意,第2行是所有赋值
sub.left
被分配一个新节点,其
被分配为
4

在java中,如果不声明任何构造函数,JVM将创建没有参数的默认构造函数。但如果您使用参数声明构造函数,JVM将不会创建没有参数的默认构造函数。 第1行

sub.left.值=4; 你的班级还没有开始。所以它将是空的

第1行

sub.left=新节点(4)


您可以初始化类并为其赋值。所以不能为空。

我将节点的值设置为4@developer033,而不是节点的值