public int widthOfBinaryTree(TreeNode root) {
/*
层序遍历+记录完全二叉树的坐标,左孩子2*i,右孩子2*i+1
而且要有两个变量,一个记录本层节点数,一个记录下层节点数
层序遍历用队列实现
还要有一个队列记录本层的下标
*/
//层序遍历记录节点
Queue<TreeNode> tree = new LinkedList<>();
//记录每个节点的位置,用来判断此节点的孩子的坐标
Queue<Integer> index = new LinkedList<>();
//当前层数量和下一层数量
int cur = 1;
int next = 0;
//本层开始坐标和结束坐标
int sta = 1;
int end = 1;
//记录结果
int res = 0;
tree.offer(root);
index.offer(1);
while (!tree.isEmpty())
{
//当前节点和坐标
TreeNode curTree = tree.poll();
end = index.poll();
//添加左子树和坐标
if (curTree.left!=null)
{
tree.offer(curTree.left);
next++;
index.offer(end*2);
}
//添加右子树和坐标
if (curTree.right!=null)
{
tree.offer(curTree.right);
next++;
index.offer(end*2+1);
}
//本层待遍历节点数-1
cur--;
//本层遍历完毕,更新结果和下一层数据
if (cur==0)
{
res = Math.max(res,end-sta+1);
cur = next;
next = 0;
sta = index.isEmpty()?1:index.peek();
}
}
return res;
}

最新文章

  1. Web中的XHRHttpRequest
  2. 【Alpha版本】 第十天 11.18
  3. Yocto开发笔记之《根文件系统裁剪》(QQ交流群:519230208)
  4. LeetCode(6) - ZigZag Conversion
  5. Golang在视频直播平台的高性能实践
  6. java计算两个日期相差多少天
  7. css3绘制腾讯logo
  8. [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches
  9. java初步—参数的值传递
  10. python邮件SMTP的GUI编程
  11. js实现小球的弹性碰撞。
  12. android仿漫画源码、抽奖转盘、Google相册、动画源码等
  13. CSS弹性盒模型(flex box)
  14. loadrunner使用https请求
  15. easyui 进阶之表单校验、自定义校验
  16. 51nod1432贪心
  17. 实验源码,DES,AES,RSA,椭圆曲线
  18. FileFilter文件过滤器
  19. Android 开发服务类 05_ ApkPatchDemo
  20. 在IDEA里创建web项目,以及web 项目部署

热门文章

  1. [整理]qbxt集训10场考试 大 杂 烩 (后篇)
  2. Java支付项目实战教程,包括支付宝,微信等支付方式,不看亏!
  3. maven依赖问题的出现原因与解决方式
  4. 老猿学5G扫盲贴:PDU协议数据单元、PDU连接业务和PDU会话的功能详解
  5. 第八章、Designer组件属性编辑界面中QWidget类相关属性详解
  6. 从Linux源码看Socket(TCP)的accept
  7. 第 7篇 Scrum 冲刺博客
  8. 实现一个类型判断函数,需要鉴别出基本类型、function、null、NaN、数组、对象?
  9. 算法——最长上升子序列(DP和二分)
  10. spark中map和mapPartitions算子的区别