题目描述
二叉树的题,题目描述一贯是这么简单。
算法思路
最简单的思路,递归,用一个变量记录深度,一个变量保存最大深度,到达叶子节点时将叶子值保存到储值变量。
class Solution:
def __init__(self):
self.di=0
self.MAXd=0
self.res=[]
def deepestLeavesSum(self, root: TreeNode) -> int:
if not root:return
if not (root.left or root.right):
if self.di>self.MAXd:
self.MAXd=self.di
self.res=[root.val]
elif self.di==self.MAXd:
self.res.append(root.val)
self.di+=1
self.deepestLeavesSum(root.left)
self.deepestLeavesSum(root.right)
self.di-=1
return sum(self.res)
执行用时 :120 ms, 在所有 Python3 提交中击败了42.63%的用户
好吧,被评论区提醒了,二叉树的层次遍历可能会更简单更快一点。
class Solution:
def deepestLeavesSum(self, root: TreeNode) -> int:
front = [root]
while front != []:
front_new = []
for f in front:
if f.left is not None:
front_new.append(f.left)
if f.right is not None:
front_new.append(f.right)
if front_new == []:
break
front = front_new
res = 0
for f in front:
res += f.val
return res
执行用时 :104 ms, 在所有 Python3 提交中击败了81.40%的用户
然后就是第一版的参数可以少一个……
class Solution:
def __init__(self):
self.res=0
self.MAXd=0
def deepestLeavesSum(self, root: TreeNode,di=0) -> int:
if not root:return
if not (root.left or root.right):
if di>self.MAXd:
self.MAXd=di
self.res=root.val
elif di==self.MAXd:
self.res+=root.val
di+=1
self.deepestLeavesSum(root.left,di)
self.deepestLeavesSum(root.right,di)
di-=1
return self.res