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

山东网站建设开发维护可以引流推广的app

山东网站建设开发维护,可以引流推广的app,网站建设课程心得,wordpress新增文章小工具目录 1 问题描述 1.1 示例1 1.2 示例2 1.3 示例3 2 解题思路 3 代码实现 4 代码解析 4.1 定义队列,初始化根节点 4.2 层序遍历,处理每个节点 4.3 处理空节点 4.4 处理非空节点 5 总结 1 问题描述 给定一个二叉树,确定他是否是一…

目录

1 问题描述

1.1 示例1

1.2 示例2

1.3 示例3

2 解题思路 

3 代码实现

4 代码解析

4.1 定义队列,初始化根节点

4.2 层序遍历,处理每个节点

4.3 处理空节点

4.4 处理非空节点

5 总结


1 问题描述

给定一个二叉树,确定他是否是一个完全二叉树。

完全二叉树的定义:若二叉树的深度为 h,除第 h 层外,其它各层的结点数都达到最大个数,第 h 层所有的叶子结点都连续集中在最左边,这就是完全二叉树。(第 h 层可能包含 [1~2h] 个节点)

数据范围:节点数满足 1≤n≤100 1≤n≤100 

样例图1:

样例图2:

样例图3:

1.1 示例1

输入:

{1,2,3,4,5,6}

返回值:

true

1.2 示例2

输入:

{1,2,3,4,5,6,7}

返回值:

true

1.3 示例3

输入:

{1,2,3,4,5,#,6}

返回值:

false

2 解题思路 

采用层序遍历(BFS)方式,通过队列 queue<TreeNode*> 进行逐层扫描。首先将根节点入队,然后依次出队检查其左右子节点。关键在于一个布尔变量 mustBeLeaf,用于标识是否已经遇到 nullptr,即是否应该只允许叶子节点(空节点)出现。当 nullptr 出现后,若后续仍有非空节点,则说明该树不是完全二叉树,返回 false;否则,遍历结束返回 true。这样保证了若某层的节点不满,则该层之后不能再有非空节点,从而正确判断完全二叉树的性质。

3 代码实现

    bool isCompleteTree(TreeNode* root) {// write code hereif (root == nullptr) return true;queue<TreeNode*> q;q.push(root);bool mustBeLeaf = false;while (!q.empty()) {TreeNode* node = q.front();q.pop();if (mustBeLeaf){if (node != nullptr) return false;}else {if (node == nullptr){mustBeLeaf = true;}else {q.push(node->left);q.push(node->right);}}}return true;}

4 代码解析

4.1 定义队列,初始化根节点

if (root == nullptr) return true;
queue<TreeNode*> q;
q.push(root);
bool mustBeLeaf = false;

首先,代码检查根节点是否为空,若为空,则直接返回 true,因为空树是完全二叉树。然后,定义一个队列 q,用于进行层序遍历(BFS),并将根节点 root 入队。变量 mustBeLeaf 用于标记是否遇到了空节点,一旦为 true,后续所有节点必须为空,否则就不是完全二叉树。

4.2 层序遍历,处理每个节点

while (!q.empty()) {TreeNode* node = q.front();q.pop();

使用 while 循环进行层序遍历,每次从队列 q 中取出队首节点 node。如果 q 为空,说明遍历完成,跳出循环。

4.3 处理空节点

    if (mustBeLeaf){if (node != nullptr) return false;}

如果 mustBeLeaftrue,说明之前已经遇到了空节点,那么所有后续节点都必须为空。如果当前节点 node 不是空节点,则说明二叉树不是完全二叉树,直接返回 false

4.4 处理非空节点

    else {if (node == nullptr){mustBeLeaf = true;}else {q.push(node->left);q.push(node->right);}}

如果 mustBeLeaf 仍为 false,则说明当前节点还可以是非空的。如果当前节点 nodenullptr,则将 mustBeLeaf 设为 true,意味着之后所有节点必须为空。如果当前节点 node 不是 nullptr,则继续将 node->leftnode->right 依次入队,即继续层序遍历子节点。

5 总结

通过队列依次遍历每个节点,并使用布尔变量 mustBeLeaf 来标记是否已经遇到空节点,确保一旦出现 nullptr,后续所有节点都必须为空,否则返回 false。该方法能有效检测是否存在不连续的叶子节点,从而正确判断完全二叉树的性质。整个算法的时间复杂度为 O(n),空间复杂度为 O(n),适用于 n ≤ 100 的数据范围,能够高效解决问题。

http://www.dtcms.com/wzjs/294131.html

相关文章:

  • 电子商城网站开发教程百度识图搜索引擎
  • 上海免费模板建站厦门seo排名公司
  • 邯郸做网站公司哪家好seo公司是什么
  • 天津智能网站建设baidu百度
  • 美国网站注册免费发布广告的网站
  • 个人电子邮件注册网站申请下载百度app并安装
  • 手机qq电脑版登录入口官网优化网站排名解析推广
  • 单品电商网站建设培训总结心得体会
  • 成都模板网站建设服务windows优化大师可以卸载吗
  • 没有做网站经验可以学seo吗北京谷歌seo公司
  • node.js 网站开发网域名解析ip查询
  • 自做网站视频杭州seo网站推广
  • net网络网站建设上海网络推广公司网站
  • 单页网站怎么卖指数基金定投怎么买
  • 夏天做那个网站能致富百度关键词搜索优化
  • 网页qq邮箱长沙弧度seo
  • 成都网站建设方法数码湖南专业关键词优化
  • 电子商务网站建设的知识点怎么做网站优化
  • 做淘宝网站百度问答优化
  • 婴幼儿用品网站开发意义安卓优化大师2021
  • 宝安附近公司做网站建设多少钱win10优化工具
  • wordpress网站统计2345网址导航是病毒吗
  • 电子商务网站建设需求表广东疫情最新数据
  • 女与男爱做电影网站免费下载怎么快速优化网站
  • 企业网站建设与管理搜索引擎优化的例子
  • 神马seo排名关键词点击seo网站培训优化怎么做
  • 北京好的网站建设企业网页设计公司
  • 心理健康网站建设论文北京网站优化排名推广
  • 西安那里做网站大连最好的做网站的公司
  • 凯里网站建设流程徐州seo企业