文章目录
- 题目
- 方法一:迭代层序 + 每层节点dfs 维护一个count变量
题目
方法一:迭代层序 + 每层节点dfs 维护一个count变量
思路:
- 层序遍历每一个节点
- 遍历一个节点就对这个节点进行dfs
- dfs的同时,维护一个count变量,并且把每次路径节点进行累加,然后判断sum==target 如果相等 让count++
- 直到当前节点的dfs结束后,再进行下一个节点的dfs
- 最后输出count
// 方法一 迭代层序 + 每层节点dfs 维护一个count变量
int count ;
public int pathSum(TreeNode root, int targetSum) {
if(root == null) return 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int size = queue.size();
for(int i =0 ;i<size;i++){
TreeNode node = queue.poll();
checkPathDfs(node,0,targetSum);//对该节点的dfs的同时 累加路径的值同时和target对比,若sum累加值 == target 则count++
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
}
}
return count;
}
//dfs:累加路径的值同时和target对比,若sum累加值 == target 则count++
public void checkPathDfs(TreeNode root, long sum,int targetSum) {//注意 sum要为long 因为测试案例超出了int的范围了 sum值会处在封顶的位置,而不是真实值
if(root == null) return ;
sum = sum + root.val;
if(sum == targetSum) count++;
checkPathDfs(root.right,sum,targetSum);//对右子树dfs 并且sum继承过来 左右子树的sum归左子树的,右子树的sum归右子树 互不干扰
checkPathDfs(root.left,sum,targetSum);
}