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

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

1. 题目描述

2. 题目分析

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

3. 题目代码

3.1 DFS

public int sumNumbers(TreeNode root) {
    return dfs(root, 0);
  }
  public static int dfs(TreeNode root, int prevSum) {
    if (root == null) {
      return 0;
    }
    // 最开始是0层~
    int sum = prevSum * 10 + root.val;
    if (root.left == null && root.right == null) {
      return sum;
    } else {
      return dfs(root.left, sum) + dfs(root.right, sum);
    }
  }

3.2 BFS

public int sumNumbers1(TreeNode root) {
    if(root == null) {
      return 0;
    }
    Queue<TreeNode> queue = new LinkedList<TreeNode>();
    Queue<Integer> queue1 = new LinkedList<Integer>();
    int sum = 0;
    queue.add(root);
    queue1.add(root.val);
    while (!queue.isEmpty()) {
      TreeNode tempNode = queue.poll();
      int num = queue1.poll();
      if(tempNode.left == null && tempNode.right == null) {
        System.out.println(num);
        sum += num;
      }else {
        if(tempNode.left != null) {
          queue.add(tempNode.left);
          queue1.add(num * 10 + tempNode.val);
        }
        if(tempNode.right != null) {
          queue.add(tempNode.right);
          queue1.add(num * 10 + tempNode.val);
        }
      }
    }
    return sum;
  }

4. 总结

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


相关文章
|
3月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
34 0
LeetCode第二十四题(两两交换链表中的节点)
|
3月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
50 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
3月前
【LeetCode 46】450.删除二叉搜索树的节点
【LeetCode 46】450.删除二叉搜索树的节点
27 0
|
5月前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
|
5月前
|
Python
【Leetcode刷题Python】450. 删除二叉搜索树中的节点
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
52 4
【Leetcode刷题Python】450. 删除二叉搜索树中的节点
|
5月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
62 5
|
5月前
|
Python
【Leetcode刷题Python】222. 完全二叉树的节点个数
LeetCode第222题"完全二叉树的节点个数"的Python代码实现,通过递归和深度优先遍历的方法来计算给定完全二叉树的节点总数。
60 5
|
5月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
50 4
|
7月前
|
算法 数据可视化 数据挖掘
哈希表+DFS快速解决力扣129题:求根节点到叶节点数字之和
哈希表+DFS快速解决力扣129题:求根节点到叶节点数字之和
|
8月前
|
存储
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
52 1