您的位置:首页 > 编程语言 > Java开发

Path Sum II (Java)

2014-12-30 15:16 323 查看
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]
]


Source

List<List<Integer>> path = new ArrayList<List<Integer>>();
List<Integer> s = new ArrayList<Integer>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
if(root == null) return path;
int cur = root.val;
s.add(root.val);

DFS(root, cur, sum);
return path;
}

public void DFS(TreeNode root, int cur, int sum){
if(root.left == null && root.right == null){
if(sum == cur){

path.add(new ArrayList<Integer>(s)); //注意添加的方法,如果不加new ArrayList s变path也跟着变

}
return ;
}

if(root.left != null){
s.add(root.left.val);
DFS(root.left, cur + root.left.val, sum);
s.remove(s.size() - 1);
}
if(root.right != null){
s.add(root.right.val);
DFS(root.right, cur + root.right.val, sum);
s.remove(s.size() - 1); //.remove(要删除的元素的位置)
}
}

Test

public static void main(String[] args){
TreeNode a = new TreeNode(5);
a.left = new TreeNode(4);
a.right = new TreeNode(8);
a.left.left = new TreeNode(11);
a.left.left.left = new TreeNode(7);
a.left.left.right = new TreeNode(2);
a.right.left = new TreeNode(13);
a.right.right = new TreeNode(4);
a.right.right.left = new TreeNode(5);
a.right.right.right = new TreeNode(1);

System.out.println(new Solution().pathSum(a, 22));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode Binary Tree