LeetCode 1302. Deepest Leaves Sum (Medium)
Given a binary tree, return the sum of values of its deepest leaves.
Example 1:

Input: root = [1,2,3,4,5,null,6,7,null,null,null,null,8] Output: 15
Constraints:
- The number of nodes in the tree is between
1and10^4. - The value of nodes is between
1and100.
方法1: DFS
time complexity: O(N) space complexity: O(N)
# 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: TreeNode) -> int: if not root: return 0 self.leaves = collections.defaultdict(int) self.deep = 0 self.dfs(root, 0) res = 0 #print(self.leaves) #defaultdict(<class 'int'>, {9: 3, 1: 2, 4: 3, 5: 3}) for k, v in self.leaves.items(): if v == self.deep: res += k return res def dfs(self, root, height): if not root: return height if root and not root.left and not root.right: if root.val in self.leaves: self.leaves[root.val] = max(height, self.leaves[root.val]) #要注意这个!值可能会有重复 else: self.leaves[root.val] = height self.deep = max(self.deep, height) self.dfs(root.left, height+1) self.dfs(root.right, height+1) return height
方法2: BFS
time complexity: O(N) space complexity: O(N)
# 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: TreeNode) -> int: if not root: return 0 q = collections.deque() q.append(root) res = 0 while q: tmp = [] for _ in range(len(q)): node = q.pop() if node: tmp.append(node.val) q.appendleft(node.left) q.appendleft(node.right) if tmp: res = sum(tmp) return res
浙公网安备 33010602011771号