计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-left-leaves
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
本题有递归和迭代两种方法:
迭代版本,利用层序遍历,每次遍历到左叶子节点时就相加。
python实现如下:
class Solution:
def sumOfLeftLeaves(self, root: TreeNode) -> int:
if root is None:
return 0
queue = []
sum = 0
queue.append(root)
while queue:
l = len(queue)
while l:
t = queue.pop(0)
if t.left is not None:
if t.left.left is None and t.left.right is None:
sum += t.left.val
queue.append(t.left)
if t.right is not None:
queue.append(t.right)
l = l-1
return sum
go实现版本如下:
func sumOfLeftLeaves(root *TreeNode) int {
if root == nil {
return 0
}
sum := 0
queue := make([]*TreeNode,0)
queue = append(queue,root)
for len(queue) != 0 {
l := len(queue)
for l > 0 {
t := queue[0]
if t.Left != nil {
if t.Left.Left == nil && t.Left.Right == nil {
sum += t.Left.Val
}
queue = append(queue,t.Left)
}
if t.Right != nil {
queue = append(queue,t.Right)
}
queue = queue[1:]
l--
}
}
return sum
}
递归版本:
采用任意一种递归遍历方法都可以,我采用的是前序遍历的方法:
python实现:
class Solution:
def sumOfLeftLeaves(self, root: TreeNode) -> int:
if root is None:
return 0
sum = 0
if root.left is not None and root.left.left is None and root.left.right is None:
sum += root.left.val
sum += self.sumOfLeftLeaves(root.left)
sum += self.sumOfLeftLeaves(root.right)
return sum
go实现:
func sumOfLeftLeaves(root *TreeNode) int {
sum := 0
if root == nil {
return 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
}