您的位置:首页 > 其它

[LeetCode]Path Sum II

2014-03-24 16:36 246 查看

题目描述

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]
]

给出二叉树中路径值等于给定数的所有路径。

解题思路

按以下步骤进行:

root == null,则返回空list;
root是叶子节点,如果root.val == sum,返回添加有root的list,否则返回空list;
如果root不是叶子节点 && root.left!=null,得到leftList = pathSum(root.left, sum - root.val),遍历leftList,进行操作add(0, root.val),遍历完成后将leftList赋值给list;
如果root不是叶子节点 && root.right!=null,得到rightList = pathSum(root.right, sum - root.val),遍历rightList,进行操作add(0,
root.val),同时在每次循环中list进行add新的rightList元素的操作;
返回list。

代码

public static ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
ArrayList<ArrayList<Integer>> allList = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list = new ArrayList<Integer>();
if (root == null) {
return allList;
}

if (root.left == null && root.right == null) {
if (root.val == sum) {
list.add(root.val);
allList.add(list);
}
return allList;
}

if (root.left != null) {
ArrayList<ArrayList<Integer>> leftList = pathSum(root.left, sum - root.val);
if (leftList!=null && leftList.size()>0) {
for(ArrayList<Integer> child:leftList){
child.add(0, root.val);
}
allList = leftList;
}
}

if(root.right != null){
ArrayList<ArrayList<Integer>> rightList = pathSum(root.right, sum - root.val);
if (rightList!=null && rightList.size()>0) {
for(ArrayList<Integer> child:rightList){
child.add(0, root.val);
allList.add(child);
}
}
}
return allList;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: