662. Maximum Width of Binary Tree

二叉树层序遍历有关的问题 => BFS

需要求当前层的width,空node还要占位,只好传递更新一下在当前层的位置。

class Solution:
    def __init__(self):
        self.maxWidth = 0
        
    def widthOfBinaryTree(self, root: TreeNode) -> int:
        q = collections.deque([(root, 0)])
        while q:
            n = len(q)
            level = []
            for _ in range(n):
                cur, p = q.popleft()
                level.append(p)
                if cur.left: q.append((cur.left, p*2))
                if cur.right: q.append((cur.right, p*2+1))
            self.maxWidth = max(self.maxWidth, level[-1]-level[0]+1)
        return self.maxWidth if root else root

时间复杂度卡得好严格,写了个理论上worst case O(n+n**log(n))的方法都过不了...

Last updated

Was this helpful?