每日一题 -- 简单 -- 左叶子之和(404)

100 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

题目: 给定二叉树的根节点 root,返回所有左叶子之和。

示例 1:

image.png

输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
🧑🏿‍💻 🙇‍♂️ 感想:上周写了一周链表的中等题目,真的产生了自我怀疑,还是自己太菜了 😭。太难了。 周末还参加了力扣的周赛,又是找虐的一周,那些大神几分钟的时间就做完四题。真的不只是大佬,是巨佬了,太强了,然鹅我第一题简单题测试用例没通过,然后报了一个看不懂的错误 。不知道是不是力扣赛故意这样不给看在哪出错了,我都无语了就放弃了,然后就泄气了,看了中等题也感觉不会写 😭。快结束的时候我对象跟我说第二题很简单的可以写,然后他告诉我思路,最后几分钟把第二题写出来。真的被搞得泄气了。跟那些巨佬比起来,自己简直不要太菜了 🤣。 这周打算先来道简单题找回自己的信心,我都被打泄气了 哎。太难了。 这道题找的是左叶子节点之和,主要要留意的是找的是左叶子节点而不是左节点。我一开始没看好题目找的左节点还傻傻不知道 🤦 🧑🏿‍💻

🙇‍♂️ 解题思路: 本题考查的是树结构,只要是树二话不说基本就是可以递归解决。所以本题使用的是递归解决。然后找的是左叶子节点。首先叶子节点是肯定没有子节点了,所以找到左节点后还要判断是否还有子节点,如果没有再将当前节点的值存起来。如果传进来的root为空,则要返回0还不是null,这里需要注意一下

function sumOfLeftLeaves(root: TreeNode | null): number {
  if (!root) return 0
  // console.log(root)
  let result: number = 0
  if (root.left) {
    result += sumOfLeftLeaves(root.left) || 0
    if (!root.left.left &&  !root.left.right) {
      result += root.left.val
    }
  }
  if (root.right) {
    result += sumOfLeftLeaves(root.right) || 0
  }
  return result
};