【力扣日記】1302 層數最深葉子節點的和 | 遞歸

題目描述

二叉樹的題,題目描述一貫是這麼簡單。

算法思路

最簡單的思路,遞歸,用一個變量記錄深度,一個變量保存最大深度,到達葉子節點時將葉子值保存到儲值變量。

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章