题目描述:
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
Note: A leaf is a node with no children.
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] ]
中文理解:
给定一个二叉树和指定值sum,返回所有路径之和为sum的路径。
解题思路:
使用回溯的方法,只不过这个情况下的遍历是左右子树的遍历,矩阵的遍历可能是上下左右,注意区别。
代码(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>> list=new ArrayList();
if(root==null)return list;
pathSumHelper(list,new ArrayList<Integer>(),root,sum);
return list;
}
public void pathSumHelper(List<List<Integer>> list,ArrayList<Integer> tempList,TreeNode root,int remain){
remain=remain-root.val;
tempList.add(root.val);
if(remain==0 && root.left==null && root.right==null){
list.add(new ArrayList(tempList));
}
else{
if(root.left!=null){
pathSumHelper(list,tempList,root.left,remain);
}
if(root.right!=null){
pathSumHelper(list,tempList,root.right,remain);
}
}
tempList.remove(tempList.size()-1);
}
}