第一题:Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:
Given the below binary tree and sum = 22,
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
题目意思:给定一个二叉树和一个数字sum,查询二叉树从根节点到叶子节点各节点的和是否存为和正好为给定的sum值,若有,返回true。
采用递归的方法:
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root==null) return false;
if(root.left==null && root.right==null && root.val==sum) return true;
return hasPathSum(root.left,sum-root.val) || hasPathSum(root.right,sum-root.val);
}
}
第二题:Path Sum II
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,
return
和上一题相同,只不过这里要将满足条件的节点输出
第一种方法:运行时间7ms 递归
public class Solution {
private List<List<Integer>> result=new ArrayList<>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
pathSumUtil(new ArrayList<Integer>(), root, sum);
return result;
}
void pathSumUtil(List<Integer> list,TreeNode root, int sum){
if(root==null) return;
list.add(root.val);
sum-=root.val;
if(root.left==null && root.right==null ){
if(sum==0) result.add(list);
return;
}
pathSumUtil(new ArrayList<Integer>(list),root.left,sum);
pathSumUtil(new ArrayList<Integer>(list),root.right,sum);
}
}
DFS:深度优先搜索
public class Solution{
public List<List<Integer>> pathSum(TreeNode root, int sum){
List<List<Integer>> results=new ArrayList<>();
List<Integer> path=new ArrayList<>();
dfs(root,0,sum,path,results);
return results;
}
public void dfs(TreeNode node, int target, int sum, List<Integer> path, List<List<Integer>> results) {
if(node==null)return;
target+=node.val;
path.add(node.val);
if(node.left==null && node.right==null && target==sum){
results.add(new ArrayList(path));
return;
}
if(node.left!=null){
dfs(node.left,target, sum, path, results);
path.remove(path.size()-1);
}
if(node.right!=null){
dfs(node.right,target, sum, path, results);
path.remove(path.size()-1);
}
}
}