二叉树中和为某一值的路径
这个题首先想到的思路就是遍历所有的二叉树路径,然后找到其中符合的路径传入res中。
而在传的时候需要传入一个list,所以建一个新的函数,在外面建立一个res,如果符合则传入list,直到前序遍历完所有的节点则返回res
在core中的代码就是前序遍历,如果root是null则返回,然后处理,最后就是两个递归,递归完成之后删除这个节点.
在中间的处理步骤就是先将这个节点加入list中,然后用target的值减去这个节点的值,如果此时target为0且左右子树都为null,则直接加入res中且返回(加入时记得是new一个新的list)。如果左右为null但不是0则直接返回。其他情况不管是不够还是超过了还是等于但没到最后都继续遍历。
import java.util.ArrayList;
class Solution {
List<List<Integer>> res=new ArrayList<List<Integer>>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
if(root==null){
return res;
}
ArrayList<Integer> list=new ArrayList<Integer>();
dfs(root,sum,list);
return res;
}
public void dfs(TreeNode node,int sum,ArrayList<Integer> list){
if(node==null){
return;
}
list.add(node.val);
sum-=node.val;
if(node.left==null && node.right==null && sum==0){
res.add(new ArrayList(list));
}
dfs(node.left,sum,list);
dfs(node.right,sum,list);
list.remove(list.size()-1);
}
}
如果单单判断是否为此值
import java.util.Stack;
class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root==null){return false;}
return dfs(root,sum);
}
public boolean dfs(TreeNode node,int sum){
if(node==null)return false;
if(node.right==null && node.left==null && sum==node.val){
return true;
}
if(node.right==null && node.left==null) return false;
return dfs(node.left,sum-node.val) || dfs(node.right,sum-node.val);
}
}