基本思路:层序遍历
原来把Null算进去一起遍历,把每行的元素都存下来,超时了。
借用完全二叉树给每个节点编号的思想,对于每一层只需要知道第一个节点的编号和最后节点的编号,即可求得题目要求的“宽度”。
class Solution:
def widthOfBinaryTree(self, root: Optional[TreeNode]) -> int:
if not root:return 0
queue = [root]
res = []
dic={root:1}
while queue:
res.append(dic[queue[-1]] - dic[queue[0]] +1)
for i in range(len(queue)):
cur = queue.pop(0)
if cur.left:
dic[cur.left]=2*dic[cur]
queue.append(cur.left)
if cur.right:
dic[cur.right]=2*dic[cur]+1
queue.append(cur.right)
return max(res)