【问题标题】:NullPointerException for my TreeNode我的 TreeNode 的 NullPointerException
【发布时间】:2016-02-27 01:52:22
【问题描述】:

这是我的树节点的结构

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 行起作用?

【问题讨论】:

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

标签: java recursion binary-tree treenode


【解决方案1】:

left 在声明时或在构造函数中均未初始化。因此,当您调用 sub.left.whatever 时,您会得到一个 NPE,因为此时 sub.left 为空。

重新排序第 1 行和第 2 行会有所帮助。

为什么第 2 行要单独运行?

请注意,第 2 行是所有作业。正在为sub.left 分配一个新节点,其value 被分配为4

【讨论】:

    【解决方案2】:

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

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

    在第 1 行

    sub.left=新节点(4);

    你初始化类并为它赋值。所以不能为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      相关资源
      最近更新 更多