私はjavaを使用してバイナリツリーのすべてのルートからリーフへのパスを印刷しようとしています。
public void printAllRootToLeafPaths(Node node,ArrayList path)
{
if(node==null)
{
return;
}
path.add(node.data);
if(node.left==null && node.right==null)
{
System.out.println(path);
return;
}
else
{
printAllRootToLeafPaths(node.left,path);
printAllRootToLeafPaths(node.right,path);
}
}
メインメソッドでは:
bst.printAllRootToLeafPaths(root, new ArrayList());
しかし、それは間違った出力を与えます。
与えられた木:
5
/ \
/ \
1 8
\ /\
\ / \
3 6 9
予想される出力:
[5、1、3]
[5、8、6]
[5、8、9]
しかし、生成された出力:
[5、1、3]
[5、1、3、8、6]
[5、1、3、8、6、9]
誰かがそれを理解できますか...
再帰メソッドを呼び出すには:
printAllRootToLeafPaths(node.left, new ArrayList(path));
printAllRootToLeafPaths(node.right, new ArrayList(path));
path
(を渡す代わりにnew ArrayList(path)
、すべてのメソッド呼び出しで単一のオブジェクトを使用するということです。つまり、元の呼び出し元に戻ると、オブジェクトは以前と同じ状態ではありません。
新しいオブジェクトを作成し、それを元の値に初期化するだけです。このようにして、元のオブジェクトは変更されません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加