《劍指offer》面試題25:二叉樹中和為某一值的路徑
阿新 • • 發佈:2019-01-23
題目:輸入一棵二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
思路:用棧記錄路徑,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; }