­

LeetCode – 左叶子之和

  • 2019 年 10 月 4 日
  • 筆記

LeetCode第404题,难度简单。这又是一题用Go语言写的,其实Go语言也挺快的。

原题地址:https://leetcode-cn.com/problems/sum-of-left-leaves/

题目描述

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

注意啊,是所有的左叶子。

解题思路:

这题采用递归的方式是很简单,只需要注意好结束的条件就可以了。

首先判断当前节点是不是nil,也就是空节点,如果是空节点,那直接返回就可以了;然后再判断当前节点的左子树是不是叶子节点,如果是叶子节点,那就加上当前子树的左子树的节点值,否则递归调用该子树的左右子树;

我怀疑我慢的原因在于,没有用好else,浪费了时间和空间去做无用的递归

中文官网题解:

https://leetcode-cn.com/problems/sum-of-left-leaves/solution/

个人题解:

/**   * Definition for a binary tree node.   * type TreeNode struct {   *     Val int   *     Left *TreeNode   *     Right *TreeNode   * }   */  func sumOfLeftLeaves(root *TreeNode) int {    if root == nil {      return 0    }    sum := 0    if root.Left != nil && root.Left.Left == nil && root.Left.Right == nil {      sum += root.Left.Val    }    sum += sumOfLeftLeaves(root.Left)    sum += sumOfLeftLeaves(root.Right)    return sum  }

结果:

同样是递归,为什么别人都是0ms,我确是3ms呢?