1. 程式人生 > >路徑總和(leetcode 113)

路徑總和(leetcode 113)

題目描述如下所示:

給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。傳送門

說明: 葉子節點是指沒有子節點的節點。

示例:
給定如下二叉樹,以及目標和 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