sl1673495 / leetcode-javascript

:beers: 喝杯小酒,一起做题。前端攻城狮从零入门算法的宝藏题库,根据知名算法老师的经验总结了 100+ 道 LeetCode 力扣的经典题型 JavaScript 题解和思路。已按题目类型分 label,一起加油。
2.08k stars 344 forks source link

左叶子之和-404 #58

Open sl1673495 opened 4 years ago

sl1673495 commented 4 years ago

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

示例:

    3
   / \
  9  20
    /  \
   15   7

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sum-of-left-leaves 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

用 DFS 的思路,去递归的判断目标节点的左节点是否是叶子节点,如果是的话,就把全局的 sum 加上目标节点的值。然后继续 DFS 目标节点的左右子节点。

let sumOfLeftLeaves = function (root) {
  let sum = 0

  let dfs = (node) => {
    if (!node) return

    if (isLeaf(node.left)) {
      sum += node.left.val
    }

    dfs(node.left)
    dfs(node.right)
  }

  dfs(root)

  return sum
}

function isLeaf(node) {
  return !!node && !node.left && !node.right
}