[ 力扣404 ] BFS和DFS解左叶子之和 | 刷题打卡

203 阅读1分钟

题目名称:左叶子之和

题目地址:leetcode-cn.com/problems/su…

计算给定二叉树的所有左叶子之和。

示例:

    3
   / \
  9  20
    /  \
   15   7

在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

解法

一、BFS

  • BFS计算左叶子和,污染节点/节点标记
/**
 * @param {TreeNode} root
 * @return {number}
 */
var sumOfLeftLeaves = function (root) {
  if (!root) return 0
  let queue = [root]
  let res = 0
  while (queue.length) {
    const stack = []
    for (let node of queue) {
      if (node.isLeft && !node.left && !node.right) {
        res += node.val
        continue
      }
      if (node.left) {
        node.left.isLeft = true
        stack.push(node.left)
      }
      node.right && stack.push(node.right)
    }
    queue = stack
  }
  return res
};

二、DFS

  • DFS递归计算
/**
 * @param {TreeNode} root
 * @return {number}
 */
var sumOfLeftLeaves1 = function (root) {
  if (!root) return 0
  let res = 0
  if (root.left) {
    if (!root.left.left && !root.left.right) {
      res += root.left.val
    }
  }
  return res + sumOfLeftLeaves1(root.left) + sumOfLeftLeaves1(root.right)
};

总结

  • 找到规律之后,DFS比BFS更加简洁

说明

  1. 本题解已同步leetcode-js-simple/11.[ 404 ] 左叶子之和,可以复制代码进行调试。
  2. 总结出了一套亲测有效的前端无痛刷题项目,有助于算法小白平稳入门,详见leetcode-js-roadmap,希望对从零开始刷题的前端小伙伴们带来帮助~

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情