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

一道面试高频题:如何判断完全二叉树?

在这里插入图片描述

解题思路

用一个队列按层遍历所有节点,同时检测2个关键条件:

1.不能出现"有右无左"

如果某个节点只有右孩子没有左孩子,直接判定为非完全二叉树。

     1/ \2   3\      ← 节点2只有右孩子,违规!5
2.遇到"不双全"节点后,后续必须都是叶子节点

一旦遇到左右孩子不双全的节点(只有左孩子或两个都没有),那么后面的所有节点都必须是叶子节点。

     1/ \2   3/         ← 节点2只有左孩子,后面的节点3必须是叶子4

代码实现

public static int MAXN = 101;
public static TreeNode[] queue = new TreeNode[MAXN];
public static int l, r;  // l是队头指针,r是队尾指针public static boolean isCompleteTree(TreeNode h) {if (h == null) {return true;  // 空树认为是完全二叉树}// 初始化队列l = r = 0;queue[r++] = h;// leaf标记:是否遇到过"不双全"的节点boolean leaf = false;while (l < r) {h = queue[l++];  // 出队// 两种违规情况if ((h.left == null && h.right != null) ||  // 情况1:有右无左(leaf && (h.left != null || h.right != null))) {  // 情况2:遇到leaf标记后还有孩子return false;}// 左孩子入队if (h.left != null) {queue[r++] = h.left;}// 右孩子入队if (h.right != null) {queue[r++] = h.right;}// 如果当前节点不双全,标记leafif (h.left == null || h.right == null) {leaf = true;}}return true;
}

如果觉得有帮助,欢迎点赞、关注、转发~

http://www.dtcms.com/a/561298.html

相关文章:

  • 使用Stream API重构你的数据处理
  • ps做网站首页怎么广州公共资源交易
  • discuz 门户网站模板物联网今天正式开网
  • python数据分析学习路线及生态
  • 【Unity踩坑】Unity测试用例命名空间错误解决方案
  • 美日股票数据API对接实战指南
  • 【Android FrameWork】第二天:认识Skia
  • 用dw做网站首页视觉营销网站建设规划分析
  • Spring Security安全框架原理与实战
  • 不用js可以做网站吗黄页88
  • 配置镜像仓库镜像(Registry Mirror)的指南
  • 25套科技商务风PPT模板合集,多场景适配专业演示(PPTX格式)
  • 网站内容收费专业网站定制报价
  • 跟der包学习java_day5「数组(Array)」
  • lerobot框架部署act模型
  • 用织梦搭建网站外贸网站建设报价
  • 【软考架构】案例分析-web应用设计:SSH 和 SSM(Spring + Spring MVC + MyBatis ) 之间的区别,以及使用场景
  • 天津做网站的公司怎么样东莞全网合一网站
  • ☆☆FPGA图像处理算法开发学习教程——总目录
  • Nestjs框架: 微服务项目工程结构优化与构建方案
  • 佛山建网站的公司泰安房地产信息网官网
  • 重庆—阿尔及利亚南通道铁海联运线路首发
  • 八股训练营第 4 天 | HTTP1.0 和 HTTP1.1 的区别?HTTP2.0 与 HTTP1.1 的区别?HTTP3.0 有了解过吗?
  • 全球搜和外贸快车哪个好厦门seo传播
  • 给传销产品做网站班级优化大师免费下载学生版
  • 工信部 网站备案材料 复印件 电子版哪个网站做外链视频好
  • UE5C++GameplayStatics源代码
  • 关键词解释:梯度下降法(Gradient Descent)
  • 做外贸的网站哪个好湖南人文科技学院
  • deadbeef播放器歌词插件