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 1 and 10^4.
  • The value of nodes is between 1 and 100.
 方法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 

 

posted @ 2020-11-16 06:43  Sheanne  阅读(87)  评论(0)    收藏  举报