路徑總和(leetcode 113)
阿新 • • 發佈:2020-07-28
題目描述如下所示:
給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。傳送門
說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和 sum = 22,
思路:從根節點開始,分別遍歷左右子樹,如果到達葉子節點且滿足路徑之和等於sum,則加入到結果中
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 12 public List<List<Integer>> pathSum(TreeNode root, int sum) { 13 List<List<Integer>> res = new ArrayList<>(); 14 backtrack(root, sum, new ArrayList<>(), res); 15 return res; 16 } 17 18 private void backtrack(TreeNode root, int sum, List<Integer> list, List<List<Integer>> res) { 19 if (root == null) { 20 return ; 21 } 22 // 添加當前值到路徑中 23 list.add(root.val); 24 sum -= root.val; 25 26 if (0 == sum && root.left == null && root.right == null) { 27 res.add(new ArrayList<>(list)); 28 } 29 30 backtrack(root.left, sum, list, res); 31 backtrack(root.right, sum, list, res); 32 // 重置狀態 33 list.remove(list.size() - 1); 34 } 35 }
&n