递归解法
二叉树的宽度就是二叉树宽度最大的层的宽度
def widthOfBinaryTree(self,root):
self.ans = 0
dic = {}
def dfs(node,pos=0,depth=0):
if node:
dic.setdefault(depth,pos)
self.ans = max(self.ans,pos-dic[depth]+1)
dfs(node.left,depth+1,pos*2)
dfs(ndoe.right,depth+1,pos*2+1)
dfs(root)
return self.ans
非递归解法
def widthOfBinaryTree(root):
width = 0
level = [(1,root)]#根结点序号为1
while level:当前层不为空
width = max(width,level[-1][0]-level[0][0]+1)#当前层的宽度
level = [k
for num,node in level
for k in enumerate((node.left,node.right),2*num) if k[1]]#列表重置为当前层每个节点的非空左右节点,左节点序号为2*num,右节点序号为2*num+1
return width