题目要求
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]
]
从树中找到所有符合条件的从根节点到叶节点路径,条件即为树上所有节点值的和等于目标值。
Path Sum I可以参考这篇博客
思路和代码
其实这里本质上的思路并没有改变,还是采用深度优先算法,采用自顶向下递归的方式将符合条件的结果放入结果集中。
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
pathSum(root, sum, new ArrayList<Integer>(), result);
return result;
}
public void pathSum(TreeNode root, int sum, List<Integer> path, List<List<Integer>> result){
if(root==null) return;
sum -= root.val;
if(isLeaf(root) && sum==0){
path.add(root.val);
result.add(new ArrayList<Integer>(path));
path.remove(path.size()-1);
return;
}
path.add(root.val);
pathSum(root.left, sum, path, result);
pathSum(root.right, sum, path, result);
path.remove(path.size()-1);
}
private boolean isLeaf(TreeNode node){
return node!=null && node.left==null && node.right==null;
}
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。