# 1302. [Deepest Leaves Sum](https://leetcode.com/problems/deepest-leaves-sum/) <!-- https://leetcode.com/problems/deepest-leaves-sum/ --> ### 最後成功submit的code ```python # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def deepestLeavesSum(self, root: Optional[TreeNode]) -> int: n_layer = 0 result = {} result['max_layer'] = 0 self.traverse(root,n_layer,result) return sum(result['ans']) def traverse(self,node,n_layer,result): if not node: return if not node.left and not node.right: if n_layer > result['max_layer']: result['max_layer'] = n_layer result['ans'] = [node.val] elif n_layer == result['max_layer']: result['ans'].append(node.val) else: return self.traverse(node.left,n_layer+1,result) self.traverse(node.right,n_layer+1,result) ``` 有點類似113. [Path Sum II](https://leetcode.com/problems/path-sum-ii/) 只不過這次要把最深那一層leaf的值給存下來 想法是要記錄目前最深的那層(max_layer)是哪層,以及值是甚麼 如果另一個分支也走到leaf,則要判斷這個leaf的層數 1. 大於(max_layer) -> 答案的array要從這層leaf開始算起 2. 等於(max_layer) -> 同一層的leaf 答案的array加入這層的值 3. 小於(max_layer) -> 甚麼都不做 ### 一開始錯誤的code ``` python # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def deepestLeavesSum(self, root: Optional[TreeNode]) -> int: max_layer = 0 n_layer = 0 result_list = [] self.traverse(root,n_layer,max_layer,result_list) return sum(result_list) def traverse(self,node,n_layer,max_layer,result_list): if not node: return if not node.left and not node.right: if n_layer > max_layer: max_layer = n_layer result_list.append(node.val) elif n_layer == max_layer: result_list.append(node.val) else: return self.traverse(node.left,n_layer+1,max_layer,result_list) self.traverse(node.right,n_layer+1,max_layer,result_list) ``` 這樣子max_layer 無法固定被存取下來? 每一次call traverse時,max_layer傳入的都是 0 ,後來才改成存在result這個字典裡的'max_layer'