leetcode - 662. 二叉树最大宽度
题目
![在这里插入图片描述](https://img-blog.csdnimg.cn/e25617251adb433fb8bb26aec0fa295a.png)
代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
typedef struct TreeNode{
int val;
struct TreeNode *left, *right;
}TreeNode, *BiTree;
void create(BiTree &root){
int tn;
cin>>tn;
if(tn == -1){
root = NULL;
return;
}
root = new TreeNode;
root->val = tn;
create(root->left);
create(root->right);
}
int widthOfBinaryTree(TreeNode* root) {
if(!root){
return 0;
}
int ans = 1;
queue<pair<TreeNode*, unsigned long long> > q;
q.emplace(root, 1);
while(!q.empty()){
unsigned long long start = q.front().second, end = 0;
int len = q.size();
for(int i = 0; i < len; i++){
auto node = q.front();
q.pop();
if(i == len - 1){
end = node.second;
}
if(node.first->left){
q.emplace(node.first->left, node.second*2-1);
}
if(node.first->right){
q.emplace(node.first->right, node.second*2);
}
}
if(ans < end-start+1){
ans = end - start + 1;
}
}
return ans;
}
int main(){
TreeNode* root;
int res;
create(root);
res = widthOfBinaryTree(root);
cout<<res;
return 0;
}