Max Width of Binary Tree

https://leetcode-cn.com/problems/maximum-width-of-binary-tree/

O(n)遍历是可以做的,我Google面试时也只想到这个。DFS可以变成O(log(n)) 需要意识到

(1)一点如果parent是i, left child 的index就是2*i,right是2*i+1

(2)我们一个dictionary来记录每一个level最左边的点,也就是depth第一次更新时的pos,然后通过left和后面的同level的pos 的差来求出最大possible 的width

代码

class Solution:
    def widthOfBinaryTree(self, root: TreeNode) -> int:
        self.left = dict()
        self.res = 0
        def dfs(node,depth,pos):
            if node == None:
                return
            if depth not in self.left:
                self.left[depth] = pos
            self.res = max(self.res,pos-self.left[depth]+1)
            dfs(node.left,depth+1,pos*2)
            dfs(node.right,depth+1,pos*2+1)
        dfs(root,0,0)
        return self.res

Last updated

Was this helpful?