题目
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:Given the below binary tree and
sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]
1 可以想到用递归,思路大致如下:如果碰到节点为null,不去处理直接返回;如果碰到叶子节点,则计算是否和最终值相等,如果相等,则把之前的链表加最后这个元素一起加入答案,返回的时候删除这个叶子节点元素;其他情况的时候,把这个节点的值加入链表,然后分别左右递归,退出的时候,需要删除这个节点的值。
public class Solution {
public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> temp = new ArrayList<Integer>();
useme(root,sum,ans,temp);
return ans;
}
public void useme(TreeNode root ,int sum , ArrayList<ArrayList<Integer>> ans, ArrayList<Integer> temp){
if(root == null){
return ;
}
if(root.left == null && root.right == null){
if(root.val == sum){
temp.add(root.val);
ans.add(new ArrayList<Integer>(temp));
temp.remove(temp.size()-1);
return ;
}
}
temp.add(root.val);
useme(root.left,sum-root.val,ans,temp);
useme(root.right,sum-root.val,ans,temp);
temp.remove(temp.size()-1);
}
}