这是树的第27篇算法,力扣链接。
给定二叉树的根节点
root
,返回所有左叶子之和。示例 1:
输入: root = [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
老规矩先上层级遍历,一定能解:
func sumOfLeftLeaves(root *TreeNode) int {
result := 0
if root == nil {
return result
}
stack := []*TreeNode{root}
for len(stack) > 0 {
node := stack[len(stack)-1]
stack = stack[:len(stack)-1]
if node.Left != nil {
if node.Left.Left == nil && node.Left.Right == nil {
result += node.Left.Val
}
stack = append(stack, node.Left)
}
if node.Right != nil {
stack = append(stack, node.Right)
}
}
return result
}
广度优先遍历当然也可以:
func sumOfLeftLeaves(root *TreeNode) int {
result := 0
if root == nil {
return result
}
queue := []*TreeNode{root}
for len(queue) > 0 {
node := queue[0]
queue = queue[1:]
if node.Right != nil {
queue = append(queue, node.Right)
}
if node.Left != nil {
if node.Left.Left == nil && node.Left.Right == nil {
result += node.Left.Val
}
queue = append(queue, node.Left)
}
}
return result
}