【力扣每日一题】129. 求根到叶子节点数字之和

喜欢ヅ旅行 2022-11-21 03:44 256阅读 0赞

不得不说,憨憨脑袋没有递归~~~

" class="reference-link">1. 题目描述在这里插入图片描述

2. 题目分析

  • 题目意思很简单,遍历树的每一条路径,然后相加,返回最后结果
  • 思路一:DFS【每次看代码就秒懂,自己每次都想不到】:递递归归,莫有脑袋。每次递归加上从一开始的值
  • 思路二:BFS【个人最喜欢的】:维护两个队列,队列一存放root,队列二存放val,每次遍历抛出,队列二种始终更新这一条分树的值,最后相加

3. 题目代码

3.1 DFS

  1. public int sumNumbers(TreeNode root) {
  2. return dfs(root, 0);
  3. }
  4. public static int dfs(TreeNode root, int prevSum) {
  5. if (root == null) {
  6. return 0;
  7. }
  8. // 最开始是0层~
  9. int sum = prevSum * 10 + root.val;
  10. if (root.left == null && root.right == null) {
  11. return sum;
  12. } else {
  13. return dfs(root.left, sum) + dfs(root.right, sum);
  14. }
  15. }

3.2 BFS

  1. public int sumNumbers1(TreeNode root) {
  2. if(root == null) {
  3. return 0;
  4. }
  5. Queue<TreeNode> queue = new LinkedList<TreeNode>();
  6. Queue<Integer> queue1 = new LinkedList<Integer>();
  7. int sum = 0;
  8. queue.add(root);
  9. queue1.add(root.val);
  10. while (!queue.isEmpty()) {
  11. TreeNode tempNode = queue.poll();
  12. int num = queue1.poll();
  13. if(tempNode.left == null && tempNode.right == null) {
  14. System.out.println(num);
  15. sum += num;
  16. }else {
  17. if(tempNode.left != null) {
  18. queue.add(tempNode.left);
  19. queue1.add(num * 10 + tempNode.val);
  20. }
  21. if(tempNode.right != null) {
  22. queue.add(tempNode.right);
  23. queue1.add(num * 10 + tempNode.val);
  24. }
  25. }
  26. }
  27. return sum;
  28. }

4. 总结

  • 对于DFS而言,递归一定要看好入口和出口,准备开始刷刷递归的题目找找感觉。
  • 对于BFS而言,队列进进出出,数值都比较明显,也便于自己操作
  • 总而言之:题目刷多了,这种题就见怪不怪了。

发表评论

表情:
评论列表 (有 0 条评论,256人围观)

还没有评论,来说两句吧...

相关阅读