当前位置: 首页 > news >正文

【剑斩OFFER】算法的暴力美学——leetCode 662 题:二叉树最大宽度

一、题目描述

二、算法原理

思路:使用队列实现层序遍历 + 让节点绑定一个下标 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; queue<pair<TreeNode*,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--) { pair<TreeNode*,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; } };
http://www.jsqmd.com/news/250245/

相关文章:

  • Web3.0革命:智能合约的混沌测试生存指南
  • 损失曲线(loss surface)的个人理解
  • 短视频缺音效?2026年免费音效素材网站推荐榜单 自媒体/影视后期/游戏
  • 简单几步,用Live Avatar生成你的个性化数字人
  • 基于微服务SpringCloud+Vue的教材征订管理系统设计与实现
  • 深度学习——卷积神经网络CNN
  • 【保姆级】一招教你彻底关闭Windows系统自动更新(近期Win11严重BUG,不要更新),禁止win11更新
  • django-flask基于python的观赏鱼养殖互助商城系统的设计与实现
  • 我就纳闷了,岁数大了就这么不受人待见啦?然后有人说了,你就写写需求,用用框架,画画UI,复制粘贴,你只是用一年的经验工作了十年而已,一点价值都没有! 你这么大岁数,应该与时俱进,不断学习新技术,1或
  • 告别“玩具”级开发:如何用向量引擎构建企业级 AI Agent 集群?(含 Python 异步并发实战)
  • django-flask基于python的高中信息技术在线学习网站的设计与实现
  • 基于Springboot+Vue的大学生军训系统设计与实现
  • 元宇宙崩溃实录:缺乏AI压力测试引发的虚拟世界雪崩
  • AI后端工程化:FastAPI + Pydantic + JWT 鉴权实战,从零构建 AI 接口服务
  • 扫描线算法
  • 比如我现在左转没看到门左走,然后右转也没看到门后退,结果过了门了,最后一步奖励100,训练的时候会怎么修改神经网络 gru+ppo,还有离门就差一步结果跑出去绕了5步最后奖励20
  • ue5 设置分辨率笔记
  • 11. 命令缓冲区和DMA
  • 12. CPU → GPU数据上传 + 渲染指令执行流程
  • [原创]基于CCO-LSSVM多输出回归+SHAP可解释性分析 Matlab代码(多输入多输出)
  • 【Java】万字解读Java的动态代理(JDK原生动态代理、CGLIB动态代理)_java 动态代理,零基础入门到精通,收藏这篇就够了
  • django基于python的秦宇宙智慧游乐场游乐园门票售票系统网站的设计与实现
  • java中反射机制的应用场景,零基础入门到精通,收藏这篇就够了
  • Java 开发转前端:利用 AI 竟然如此简单_java 对象生成前端文档,零基础入门到精通,收藏这篇就够了
  • django基于python的美食探店分享网站设计与实现
  • django基于python的社区老年人关爱服务系统的设计与实现
  • [原创]基于ELM多输出回归+SHAP可解释性分析+NSGAII多目标优化算法的工艺参数优化 Matlab代码
  • [原创基于CCO-LSSVM多输出回归+SHAP可解释性分析+NSGAII多目标优化算法的工艺参数优化 Matlab代码
  • django基于python的酒店预定管理系统 客房清洁
  • tinylisp:只有99行c代码的lisp语言