- 题目描述
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
来源:LeetCode
- 示例
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:[[5,4,11,2],[5,8,4,5]]
- 思路分析
和#112思路一样,就多了个保存节点的步骤。用回溯。
- JAVA实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
List<List<Integer>> ans = new ArrayList();
List<Integer> temp = new ArrayList();
if(root == null) return ans;
tb(ans, temp, root, targetSum);
return ans;
}
public void tb(List<List<Integer>> ans, List<Integer> temp, TreeNode root, int targetSum) {
if(root.left == null && root.right == null) {
if(root.val == targetSum) {
temp.add(root.val);
ans.add(new ArrayList(temp));
temp.remove(temp.size()-1);
}
return;
}
else {
temp.add(root.val);
if(root.left != null) tb(ans, temp, root.left, targetSum - root.val);
if(root.right != null) tb(ans, temp, root.right, targetSum - root.val);
temp.remove(temp.size()-1);
}
}
}