Java 指针或节点赋值理解有误?

Java pointer or node assignment understanding wrong?

我正在解决的一个问题是要求在二叉搜索树中插入一个节点,然后 return 最后是整个二叉树的根节点。

我似乎遇到的问题是将插入的节点保存在原始树中,因为它是根节点。我的代码如下:

static Node Insert(Node root,int value) {
    insertAux(root, value);
    return root;
}

static void insertAux(Node root, int value) {
    if (root == null) {
        root = new Node();
        root.data = value;
        root.left = root.right = null;
    } else {
        if (value > root.data) {
            insertAux(root.right, value);
        } else {
            insertAux(root.left, value);
        }
    }
}

当我用下面的树测试它时:

    4
   / \
  2   7
 / \
1   3

结果应该是:

      4
   /    \
  2      7
 / \    /
1   3  6

我已经对此进行了测试,我的 insertAux 函数实际上确实将 root 分配给了一个新的 Node(),并且当它在函数末尾遇到 null 情况时,该节点的数据分配给了值 6。我还测试并确保我的 Insert 函数 return 是整个调用结束时的原始根。但是,当我尝试查看 insertAux 是否已将 root.right.left 分配给新的 Node() 并将其数据分配给 Insert 函数内部的 6 时,我得到一个空指针异常,其中 root.right.left 为空。这是为什么,我对Java的指针或节点分配的理解是错误的吗?

Java 按值传递参数(即不按引用),root 的内部赋值在函数 return 之后丢失。以不同的方式尝试 return,也许

static Node insertAux(Node root, int value) {
static Node insertAux(Node root, int value) {
if (root == null) {
    root = new Node();
    root.data = value;
    root.left = root.right = null;
} else {
    if (value > root.data) {
        root.right = insertAux(root.right, value);
    } else {
        root.left = insertAux(root.left, value);
    }
}

return root;
}

你的 insertAux() 方法应该是这样的。

首先它应该有一个 return 类型作为节点。

你在这里做错的是你没有在父节点和子节点之间创建 link。因此,在您的情况下,创建了一个数据为 6 的新节点 ,但实际上它从未分配给其父节点

因此您需要通过 return 分配新创建的节点并将其分配给 parent.In 您的方法

if (value > root.data) {
        root.right = insertAux(root.right, value);
    } else {
        root.left = insertAux(root.left, value);
    }