題目描述
二叉樹的題,題目描述一貫是這麼簡單。
算法思路
最簡單的思路,遞歸,用一個變量記錄深度,一個變量保存最大深度,到達葉子節點時將葉子值保存到儲值變量。
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