0

我有一个二叉树,通过链接节点实现(具有:int 元素,BinaryNode 左,BinaryNode 右,BinaryNode 父属性)。我想将根节点的第 n 个节点设置为 xie 如果 n = 3,那么我想做 root.left.left.left = x。

最初,我正在考虑设置一个临时 BinaryNode 变量并执行以下操作:

BinaryNode temp = root;
BinaryNode x = new BinaryNode(10, null, null, null);

for (int i = 0; i < n; i++){
    temp = temp.left;
}

然后,一旦我走到最后,我想说,temp.left = x,但后来我意识到/认为这样做不会对实际的树做任何事情,因为 temp 只是根的副本?

那么我将如何尝试做到这一点?:<

4

2 回答 2

0

我认为这应该有效

private void replace(BinaryNode node, int n, int x) {
    if (n==0) {
        node.x = x
        return;
    }
    if (node.left != null)
        replace(node.left, n-1, x);
}

replace(root, 3, 10)并用例如调用它

于 2013-03-27T01:05:19.793 回答
0

在您的示例中,temp不是根的副本。它是对根的引用。因此,您的代码实际上会修改原始树。但是,您还有另一个问题——如果树中没有那么多节点怎么办?换句话说,如果 n 为 5 并且节点.left链中只有三个节点,那么您最终将得到 a NullPointerException。当你沿着链条走下去时,你需要检查 null 。

于 2013-03-27T01:25:35.657 回答