1. 程式人生 > >《劍指offer》面試題25:二叉樹中和為某一值的路徑

《劍指offer》面試題25:二叉樹中和為某一值的路徑

題目:輸入一棵二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。

思路:用棧記錄路徑,sum記錄當前和。如果是葉結點,判斷sum是否等於target,如果等於則輸出。help的方法最後需要將棧頂彈出,sum-=。

public static void findPath(TreeNode root, int target) {
	if (root == null)
		return ;
	Stack<TreeNode> stack = new Stack<TreeNode>();
	helpFindPath(stack, root, 0, target); 
}
public static void helpFindPath(Stack<TreeNode> stack, TreeNode root, int sum, int target) {
	if (root == null)
		return ;
	stack.push(root);
	sum += root.val;
	if (sum == target && root.left == null && root.right == null) {
		for (TreeNode node : stack)
			System.out.print(node.val + " ");
		System.out.println("");
	}
	helpFindPath(stack, root.left, sum, target);
	helpFindPath(stack, root.right, sum, target);
	
	// 每次需要彈出棧頂
	stack.pop();
	sum -= root.val;
}