gpt4 book ai didi

java - 参数分配未按预期工作

转载 作者:行者123 更新时间:2023-11-30 06:51:23 25 4
gpt4 key购买 nike

我正在使用二叉搜索树进行类分配。我试图通过将新节点分配给递归方法参数来用不同的节点替换节点。

线路node = minNode(node.right);没有按预期工作。它确实修改了参数 SearchTreeNode<E> node但此更改不会传播到 this.overallRoot 。例如,如果树的根是 5,我们删除 5,替代值为 7,this.overallRoot尽管参数节点已更改为 7,但仍为 5。请参见下面的屏幕截图。

知道我做错了什么吗?

public void remove(E data) {
if (this.overallRoot != null) {
this.removeData(this.overallRoot, data);
}
}

private void removeData(SearchTreeNode<E> node, E data) {
if (node.data == data) {
if (node.left == null && node.right == null) {
node = null;
} else if (node.left != null && node.right != null) {
node = minNode(node.right);
} else if (node.right == null) {
node = node.left;
} else if (node.left == null) {
node = node.right;
}
} else if (data.compareTo(node.data) < 0) {
this.removeData(node.left, data);
} else if (data.compareTo(node.data) > 0) {
this.removeData(node.right, data);
}
}

private SearchTreeNode<E> minNode(SearchTreeNode<E> node) {
if (node.left == null) {
return node;
}
return minNode(node.left);
}

Debugging code overallRoot with data 5 node with data 7

最佳答案

您的诊断完全正确:修改 node 没有任何好处,因为 node 是一个局部变量。对参数的修改不会传播到调用者。

不过,您可以修改node.leftnode.right。这些变化将是可见的。您需要重组代码才能利用这一点。这不是一个快速解决方案。

或者,您可以向 removeData 的调用者返回一个值,并让调用者更改适当的变量。这也需要一些思考来弄清楚从每个 removeData 的分支返回什么。调用它看起来像:

node.left = this.removeData(node.left, data);

关于java - 参数分配未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42707751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com