リーフノード値を使用してバイナリツリーパスを出力するには、次のように入力します。バックトラックするとスタックから '3'が削除されます。どのように達成するためにコードを変更するには?私はスタックから値をポップする場所を見つけることができません。スタック内のリーフ値を持つバイナリツリーパスを出力します。
// should print out "5 8 10", but it prints "5 3 8 10"
printPathWithStack(root, 5);
10
/ \
8 2
/\ /
3 5 4
void printPathWithStack(Node root, int key)
{
Stack<Node> path = new Stack<Node>();
printPathWithStackHelper(root, key, path);
}
void printPathWithStackHelper(Node root, int key, Stack<Node> path)
{
if (root == null) {
return;
}
path.push(root);
if (root.data == key && root.left == null && root.right == null) {
while (!path.isEmpty()) {
System.out.print(path.pop().data + " ");
}
} else if (root.left == null && root.right == null){
path.pop();
}
printPathWithStackHelper(root.left, key, path);
printPathWithStackHelper(root.right, key, path);
}
ここでは再帰的および非再帰的な概念を混在させています。スタックオブジェクトを使用し、再帰呼び出しを行わないか、スタックオブジェクトを使用してプログラム実行スタックに頼らないでください。 – markspace