题目是,二叉树最大的宽度!这个做过,但因为不是hot100 ,我就是做了一遍就过去了。结果今天手撕这道题。。。
刚刚试了下,超时了!好的办法是,把节点和下标(假设是满二叉树),就能解决了。
面试写的代码
python
# 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 widthOfBinaryTree(self, root: Optional[TreeNode]) -> int:
res = 0
q = []
q.append(root)
res = max(res, len(q))
while True:
#res =max(res,n)# 判断这一层的宽度
for i in range(len(q)):
curr = q.pop(0)
if not curr:
q.append(None)
q.append(None)
elif not curr.left and curr.right:
q.append(None)
q.append(curr.right)
elif curr.left and not curr.right:
q.append(curr.left)
q.append(None)
else:
q.append(curr.left)
q.append(curr.right)
if len(q) == 0:
return res
while q and not q[0]:
q.pop(0)
while q and not q[-1]:
q.pop()
res = max(res, len(q))