2026/4/18 9:29:40
网站建设
项目流程
网站的推广是怎么做的,上海搜牛信息科技有限公司,手机商城网站建设设计方案,dede网站模板免费下载一、题目描述二、算法原理思路#xff1a;使用队列实现层序遍历 让节点绑定一个下标 pair TreeNode* , unsigned int例如#xff1a;计算左节点的下标的公式#xff1a;父亲节点 * 2计算右节点的下边的公式#xff1a;父亲节点 * 2 1第一层的宽度#xff1a;1第…一、题目描述二、算法原理思路使用队列实现层序遍历 让节点绑定一个下标 pair TreeNode* , unsigned int例如计算左节点的下标的公式父亲节点 * 2计算右节点的下边的公式父亲节点 * 2 1第一层的宽度1第二层的宽度3 - 2 1 2第三层的宽度6 - 4 1 3故而最大的宽度位3为什么使用 unsigned int 因为数值溢出了也不报错。当使用 int 时即使一个数溢出了此时这两个数其中一个溢出了但是相减出来的值是正确的不过这样编译器会报错所以使用 unsigned int三、代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int widthOfBinaryTree(TreeNode* root) { if(root nullptr) return 0; queuepairTreeNode*,unsigned int que;//给每个节点绑定一个下标 que.push({root,1});//让 root 绑定 1 下标 unsigned int maxi 0;//记录最大的宽度 while(!que.empty()) { int popnum que.size(); unsigned int l que.front().second;//左边的节点的下标 unsigned int r 0; while(popnum--) { pairTreeNode*,unsigned int node que.front(); que.pop(); unsigned int index node.second; if(node.first-left ! nullptr) { que.push({node.first-left,2 * index}); } if(node.first-right ! nullptr) { que.push({node.first-right,2 * index 1}); } if(popnum 0) r index;//最右节点的下标 } maxi max(maxi, r - l 1); } return maxi; } };