#Leecode 662 https://leetcode-cn.com/problems/maximum-width-of-binary-tree/
思路:层次遍历,用map记录记录每个节点的编号。为防止编号溢出,每个节点编号减去上层最后一个节点的编号,也可使用 unsigned long long。
int widthOfBinaryTree(TreeNode* root) {
if(!root) return 0;
queue<TreeNode*> q;
int ans=0;
q.push(root);
map<TreeNode*,int> num;
num[root]=0;
TreeNode* start;
TreeNode* end;
int d=0;
while(!q.empty()){
start=q.front();
end=q.back();
ans=max(ans,num[end]-num[start]+1);
for(int i=q.size();i>0;i--){
auto p=q.front();
q.pop();
if(p->left) {
q.push(p->left);
num[p->left]=2*num[p]+1-d;
}
if(p->right) {
q.push(p->right);
num[p->right]=2*num[p]+2-d;
}
if(i==1) d=num[p]; //更新当前层最后一个节点编号
}
}
return ans;
}