文章目录
- 题目
- 方法一:迭代层序 + 每层节点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);}