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);
}
我正在解决的一个问题是要求在二叉搜索树中插入一个节点,然后 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);
}