题目:https://oj.leetcode.com/problems/path-sum/
https://oj.leetcode.com/problems/path-sum-ii/
树的操作最多就是递归,因为树的定义就是如此,这是两个很典型的面试题,难度不大,很考察基础。
Path Sum
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root == null)
return false;
boolean isleaf = (root.left==null)&&(root.right==null);
sum-=root.val;
if(isleaf && (sum==0)){
return true;
}else {
return hasPathSum(root.left, sum)||hasPathSum(root.right, sum);
}
}
}
Path Sum ||
public class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> ans = new ArrayList<>();
if(root==null)
return ans;
Stack<Integer> ls = new Stack<>();
ls.add(root.val);
findAllPath(root, sum-root.val, ls, ans);
return ans;
}
public void findAllPath(TreeNode root,int sum,Stack<Integer>ls, List<List<Integer>> ans){
if(root==null){
return;
}
boolean isleaf = (root.left==null)&&(root.right==null);
if(isleaf && sum==0){
List<Integer> temp = new ArrayList<>(ls);
ans.add(temp);
return;
}
if(root.left!=null){
ls.add(root.left.val);
findAllPath(root.left, sum-root.left.val, ls, ans);
ls.pop();
}
if(root.right!=null){
ls.add(root.right.val);
findAllPath(root.right, sum-root.right.val, ls, ans);
ls.pop();
}
}
}
前面也写过关于二叉查找树,类似的问题用C++实现过:http://blog.csdn.net/huruzun/article/details/21799441