【发布时间】:2019-07-04 14:08:42
【问题描述】:
我的代码有问题。
此函数的目的是遍历二叉树并对其进行编辑,以便将某个点的分支替换为“newNode”下的新分支。目前,它为它开始的树返回相同的值(因此current = newNode 实际上并没有编辑原始树)。
谁能解释这是为什么?谢谢。
public static Node editTree(Node current, Node newNode, String value) {
if (current == null) {
return null;
}
if (current.value.equals(value)) {
current = newNode;
return current;
}
if (!current.isLeaf()) {
editTree(current.getLeft(), newNode, value);
editTree(current.getRight(), newNode, value);
return current;
}
return current;
}
这必须以这样一种方式完成,即首先遍历一棵树(原始树),直到找到某个值。然后存放值的节点被一个新节点完全替换,新节点包含自己的值和自己的左右节点。然后将全局变量 Node 设置为等于新编辑的树的值,然后将其用于重置原始树的值。不能以任何其他方式完成的原因是因为我不能在节点类中设置左右节点的值,因为这是不允许的。
【问题讨论】:
-
这不是 BST!
-
另一个可能的错误来源:
if (current.value == value)- 你应该检查相等性,而不是身份 (if (current.value.equals(value))) -
对函数的执行方式没有影响,我已经编辑了相同的函数,因此 1) 它没有 isLeaf() 检查,2) 每次比较都使用 .equals() 和 3) 它回报较少。到目前为止,还没有产生想要的结果。
-
是的,Kartik 在他的回答中概述了原因。但是,您还应该修复上述条件,否则您可能永远不会进入该分支并返回新的
current。 -
我已经修改过了,但还是不知道怎么解决...
标签: java binary-tree nodes treenode