给定二叉树的根节点 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
}
评论前必须登录!
注册