路径总和(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 }
原文地址:https://www.cnblogs.com/skylv/p/13389837.html