今天我们将如何求二叉树的一个路径和满足某个sum
这里讲一下原理我们需要记录当前的路径和和sum作比较然后记录所有的路径和sum相比后返回的布尔值只有一个true就是满足的路径
采用的方法:递归
道理很简单代码里面解释逻辑
class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root==null){
return false;
}
List<Boolean> list=new ArrayList<Boolean>();//用来记录每条路径的布尔值
hasPathSum(root,sum,0,list);//开始递归
for(Boolean b:list){//遍历list如果有true返回即可否则返回false
if(b){
return b;
}
}
return false;
}
/**
*@param root根
*@param sum 指定路径长度
*@param pathsum 用来记录每条路径长度
*@param list是否包含此路径的布尔值集合
*/
public void hasPathSum(TreeNode root, int sum,int pathsum,List<Boolean> list) {
if(root==null){
return;
}
//如果是叶子节点加上叶子节点的值判断sum==pathsum加入list
if(root!=null&&root.left==null&&root.right==null){
pathsum+=root.val;
list.add(sum==pathsum);
}
//不是叶子结点只需要加上当前节点权值
pathsum+=root.val;
//递归左子树
hasPathSum(root.left,sum,pathsum,list);
//递归右子树
hasPathSum(root.right,sum,pathsum,list);
}
}