嵌套节点类的树编译,但插入节点返回null

时间:2017-12-25 20:40:18

标签: java

我正在尝试使用Node作为嵌套类将节点插入到我的树中。我无法弄清楚为什么tree.root不会使用我的方法insertNode

保存节点
public class Tree {
  Node root;

  private class Node {
    int value;
    Node(int value) {
      this.value = value;
    }
  }

  public static void main(String[] args) {
    Tree tree = new Tree();
    tree.insertNode(4, tree.root);
    System.out.println(tree.root);

  }

  public void insertNode(int value, Node n){
    if(n == null ){
      n = new Node(value);
    }
  }   

}

>> null

我错过了什么? 谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

您的代码的作用如下:

  1. 它会创建一个新的Treeroot Node将由编译器初始化为默认值null
  2. 你是"插入"在Tree中的某些内容至少这是方法名称所暗示的内容。实际上,除了将参数设置为默认值(如果它为null)之外,该方法不执行任何操作。
  3. 您正在打印root Node的{​​{1}} Tree
  4. 我认为您应该更改null方法,以便它实际修改insertNode的状态。

    编辑:当我读到你的问题下面的评论时,我注意到我最初错过了一些内容。在您的Tree方法中,您可能打算完全按照上面的描述进行操作。但你所做的是不同的东西:你将一些东西分配给一个局部变量而不是一个成员变量。用明确的符号写成你想要这样做:

    insertNode

    不同之处在于,您的代码this.root = new Node(value) 未绑定到对象,但n意味着Tree.root的更改(更确切地说,分配)将不会持久且无效当方法返回时。如果您将对象分配给n,则此更改将反映在Tree.root对象中。