题目描述如下所示:
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。传送门
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 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 }