LeetCode-113.路徑總和II(相關話題:深度優先)
阿新 • • 發佈:2018-12-16
給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。
說明: 葉子節點是指沒有子節點的節點。
示例: 給定如下二叉樹,以及目標和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
Java程式碼:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>> res = new LinkedList<>(); if(null != root){ List<Integer> tmp = new LinkedList<>(); dfs(root, sum, tmp, res); } return res; } private void dfs(TreeNode root, int sum, List<Integer> tmp, List<List<Integer>> res){ if(null == root.left && null == root.right){ if(root.val == sum){ tmp.add(root.val); res.add(new ArrayList<>(tmp)); tmp.remove(tmp.size()-1); } return; } tmp.add(root.val); if(null != root.left) dfs(root.left, sum-root.val, tmp, res); if(null != root.right) dfs(root.right, sum-root.val, tmp, res); tmp.remove(tmp.size()-1); } }