我有一个递归搜索树的函数,寻找一个特定的条件来保存。如果它确实成立,那么树中的那个节点应该被一种新的节点替换。在下面的示例代码中,我调用了类Tree_Node
,因为它的行为与TreeNode
非常相似,但并不完全相同。我仍然希望这个基本想法是熟悉而清晰的。
public void func(Tree_Node tn) {
if (!tn.isLeaf()) {
if (tn.condition()) {
tn = new Tree_Node(x);
} else {
func(tn.getChild(name));
}
}
}
现在我发现tn = new Tree_Node(x)
没有改变树中节点的值,我相信这是因为命令只是改变了局部变量{{1}的值而我想改变存储在它“指向”的位置的对象。在树中,我想用不同的节点替换此节点。
当我头脑风暴解决方案时,我提出了两个似乎理论上可行的选项:不知何故有父节点的内存,也许是通过将它作为参数传递给函数,然后我可以改变孩子的这个父母。我也可以为tn
定义.parent()
方法,然后在Tree_Node
上调用该方法。
想到的第二个选项是以某种方式在存储器中找到存储该节点的地址,并更新该地址的内容。出于各种原因,如果有可能而且不太困难,我会强烈地愿意这样做。我也花了一些时间谷歌搜索“java内存地址”,看看答案是否已经存在,但a)看不到有用的信息,和b)看到一些帖子暗示做这种事情是不安全的。
欢迎任何解决方案或建议。