力扣 662 https://leetcode.cn/problems/maximum-width-of-binary-tree/
需要了解树的顺序存储
如果是普通的二叉树 ,底层是用链表去连接的
如果是满二叉树,底层用的是数组去放的,而数组放的时候 会有索引对应 当前父节点是索引i,下一个左右节点就是2i,2i+1
利用满二叉树的索引特征
所以需要对每个节点进行一个索引赋值,赋值在队列中,队列用数组表示
核心代码如下
public int widthOfBinaryTreeBetter(TreeNode root) { Queue<Pair<TreeNode,Integer>> queue = new LinkedList<>(); queue.add(new Pair<>(root,1)); int res=0; while (!queue.isEmpty()){ int size = queue.size(); int left=-1; int right=-1; for (int i = 0; i < size; i++) { Pair<TreeNode, Integer> poll = queue.poll(); Integer value = poll.getValue(); if (left==-1){ left=value; } right=value; TreeNode temp = poll.getKey(); if (temp.left!=null){ queue.add(new Pair<>(temp.left,value*2)); } if (temp.right!=null){ queue.add(new Pair<>(temp.right,value*2+1)); } res=Math.max(right-left+1,res); } } return res; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人