题目大意:二叉树中有空节点,求它的最大宽度,每层的宽度定义为两端非空节点之间的长度,空节点也计入长度
分析:BFS。队列中记录节点和节点位置的pair信息。每层计算两端点的位置差即可。
代码:
class Solution {
public:
int widthOfBinaryTree(TreeNode* root) {
if (!root) return 0;
queue<pair<TreeNode*, unsigned long long>> q;
int ans = 1;
q.push({root, 1});
while (!q.empty()) {
int sz = q.size();
ans = max(int(q.back().second - q.front().second + 1), ans);
for (int i = 0; i < sz; i++) {
TreeNode *node = q.front().first;
unsigned long long pos = q.front().second;
q.pop();
if (node->left) q.push({node->left, 2 * pos});
if (node->right) q.push({node->right, 2 * pos + 1});
}
}
return ans;
}
};