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チェーンにノードが3つしかない場合は、が得られますNullPointerException。チェーンを下るときは、nullをチェックする必要があります。

于 2013-03-27T01:25:35.657 に答える