摒弃世俗浮躁
追求技术精湛

【力扣】404. 左叶子之和

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

示例 1:

输入: root = [3,9,20,null,null,15,7] 
输出: 24 
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

示例 2:

输入: root = [1]
输出: 0

提示:

  • 节点数在 [1, 1000] 范围内
  • -1000 <= Node.val <= 1000

题解:

递归法:

func sumOfLeftLeaves(root *TreeNode) int {
	count := 0
	var dfs func(node *TreeNode, isLeft bool)
	dfs = func(node *TreeNode, isLeft bool) {
		if node == nil {
			return
		}
		if node.Left == nil && node.Right == nil {
			if isLeft {
				count += node.Val
			}
			return
		}
		dfs(node.Left, true)
		dfs(node.Right, false)
	}
	dfs(root, false)
	return count
}

递归法(第二种解法):

func sumOfLeftLeaves(root *TreeNode) int {
	if root == nil {
		return 0
	}
	value := 0
	if root.Left != nil && root.Left.Left == nil && root.Left.Right == nil {
		value = root.Left.Val
	}
	return value + sumOfLeftLeaves(root.Left) + sumOfLeftLeaves(root.Right)
}

迭代法(使用了栈):

func sumOfLeftLeaves(root *TreeNode) int {
	if root == nil {
		return 0
	}
	value := 0
	stack := list.New()
	stack.PushBack(root)
	for stack.Len() > 0 {
		node := stack.Remove(stack.Back()).(*TreeNode)
		if node.Left != nil && node.Left.Left == nil && node.Left.Right == nil {
			value += node.Left.Val
		}
		if node.Right != nil {
			stack.PushBack(node.Right)
		}
		if node.Left != nil {
			stack.PushBack(node.Left)
		}
	}
	return value
}
赞(0) 打赏
未经允许不得转载:时光日记 » 【力扣】404. 左叶子之和

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册