前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >判断二叉树是否为完全二叉树

判断二叉树是否为完全二叉树

作者头像
lexingsen
发布于 2022-02-24 11:16:11
发布于 2022-02-24 11:16:11
43200
代码可运行
举报
文章被收录于专栏:乐行僧的博客乐行僧的博客
运行总次数:0
代码可运行

完全二叉树的定义(王道):设一棵高度为h,有n个节点的二叉树,当且仅当其中每一个节点都与高度为h的满二叉树编号为1~n的节点一一对应时,称为完全二叉树。下文称呼完全二叉树为CBT。

由定义可知,CBT可以不是满树,但其叶子节点只能出现在最后两层。利用这个性质来判断完全二叉树,使用层序遍历,我们依次将节点入队,而不考虑当前节点的左右孩子节点是否为空而直接入队,这样当我们在出队时发现有空节点,此时判断队列中是否还有非空节点,如果有,则说明此树是CBT。

代码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <queue>
using namespace std;


struct node {
	int val;
	node *next;
};
bool isCBT(node *root) {
	if (!root) return true;
	queue<node*> q;
	q,push(root);
	while (!q.empty()) {
		node *top = q.top();q.pop();
		if (top) {
			q.push(top->left);
			q.push(top->right);
		} else {
			//说明取出的top节点是空节点,此时看队列中是否还有非空节点
			while (!q.empty()) {
				top = q.top();q.pop();
				if (top) return false; 
			}
		}
	}
	return true;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档