版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dpengwang/article/details/87942999
求二叉树的所有左叶子节点值的和
思路
判断一个点是不是左叶子节点,要么根据他的父节点判断,父节点的左孩子为叶子,则满足条件,要么给每个节点带一个左右子树的标志位,如果是叶子节点且位于左子树则是左叶子节点
可以写出以下六种方法。
class Solution1:
def sumOfLeftLeaves(self, root):
res = 0
if root == None:
return 0
if root.left != None:
if root.left.left == None and root.left.right == None:
res += root.left.val
else:
res += self.sumOfLeftLeaves(root.left)
res += self.sumOfLeftLeaves(root.right)
return res
class Solution1.1(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root == None:
return 0
if root.left and root.left.left == None and root.left.right == None:
return root.left.val + self.sumOfLeftLeaves(root.right)
else:
return self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)
class Solution2:
def sumOfLeftLeaves(self, root):
res = 0
if root == None:
return res
stack = [root]
while(len(stack)):
node =stack.pop()
if node.left != None:
if node.left.left == None and node.left.right == None:
res += node.left.val
else:
# 此时压栈的肯定不是叶子节点
stack.append(node.left)
if node.right:
stack.append(node.right)
return res
class Solution3(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root == None:
return 0
res = [0]
self.sumofLeft(root, res, False)
return res[0]
def sumofLeft(self, node, sum_array, isLeft):
if node.left == None and node.right == None and isLeft:
sum_array[0] += node.val
else:
if node.left:
self.sumofLeft(node.left, sum_array, True)
if node.right:
self.sumofLeft(node.right, sum_array, False)
class Solution4(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root == None:
return 0
from collections import deque
queue = deque()
res = 0
queue.append(root)
while(len(queue)):
node = queue.popleft()
if node.left != None:
if node.left.left == None and node.left.right == None:
res += node.val
else:
queue.append(node.left)
if node.right:
queue.append(node.right)
return res
class Solution5(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root == None:
return 0
res = 0
stack =[[root, False]]
while(len(stack)):
node, isLeft = stack.pop()
if node.left == None and node.right == None and isLeft:
res += node.val
else:
if node.left:
stack.append([node.left, True])
if node.right:
stack.append([node.right, False])
return res
class Solution6(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root == None:
return 0
from collections import deque
queue = deque()
queue.append([root, False])
res = 0
while(len(queue)):
node,isLetf =queue.popleft()
if node.left == None and node.right == None and isLetf:
res += node.val
else:
if node.left:
queue.append([node.left, True])
if node.right:
queue.append([node.right, False])
return res