您的位置:首页 > 其它

leetcode(404):Sum of Left Leaves

2018-03-04 11:36 423 查看
题目:Find the sum of all left leaves in a given binary tree.

example:

3

/ \

9 20

/ \

15 7

There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.

题目分析:求所有左叶子节点的和,然后判断是否为左叶子节点,在这个地方容易出现的问题:第一,在于单个节点的情况的漏判;第二是对于左叶子节点的判断,不能按照叶子节点的判断来走,必须按照左叶子节点的判断来处理;第三是对于如何计数和的处理,这个也需要仔细的思考。

python代码实现:

class Solution(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root == None:
return 0
if root.left == None and root.right == None:
return 0
root.val = 0
if root.left != None:
if root.left.left == None and root.left.right == None:
root.val += root.left.val
else:
root.val += self.sumOfLeftLeaves(root.left)
root.val += self.sumOfLeftLeaves(root.right)
return root.val


重新思考问题,重新复现这个问题的求解,代码如下:

class Solution(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root or (not root.left and not root.right):
return 0
if root.left:
if not root.left.left and not root.left.right:
return root.left.val + self.sumOfLeftLeaves(root.right)
return self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)


大佬的实现代码:

class Solution(object):
def sumOfLeftLeaves(self, root):
if not root: return 0
if root.left and not root.left.left and not root.left.right:
return root.left.val + self.sumOfLeftLeaves(root.right)
return self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)   # isn't leave


好吧,很开心,跟大佬的想法一样,只是还是老问题,就是大佬们的代码相对而言,更加简洁,对于多个条件的判断,然后把他们放在一起,更加清楚,方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: