设计一个算法,判断一个二叉树是否为完全二叉树
来源:互联网 发布:linux递归设置权限 编辑:程序博客网 时间:2024/04/20 02:42
思想:根据完全二叉树的定义,对完全二叉树按照从上到下、从左到右的层次遍历,应该满足一下两条要求:
●某节点没有左孩子,则一定无右孩子
●若某节点缺左或右孩子,则其所有后继一定无孩子
若不满足上述任何一条,均不为完全二叉树。
算法思路:采用层序遍历算法,用cm变量值表示迄今为止二叉树为完全二叉树(其初值为1,一旦发现不满足上述条件之一,则置cm为0),bj变量值表示迄今为止所有节点均有左右孩子(其初值为1),一旦发现一个节点没有左孩子或没有右孩子时置bj为0),在遍历完毕后返回cm的值。
对应的算法如下:
int CompBTNode(BTNode * b)
{
BTNode *Qu[MaxSize],*p;//定义一个队列,用于层次遍历
int front=0,rear=0;//队头、队尾指针
int cm=1;
int bj=1;
if(b!=NULL)
{
rear++;
Qu[rear]=b;//进队
while(front!=rear)
{
front++;
p=Qu[front];
if(p->lchild==NULL)//*p节点没有左孩子
{
bj=0;
if(p->rchild!=NULL)//没有左孩子但有右孩子
cm=0;//则不是完全二叉树
}
else//*p节点有左子树
{
if(bj==1)//迄今为止,所有节点均有左右孩子
{
rear++;//左孩子进队
Qu[rear]=b->lchild;
if(p->rchild==NULL)//*p有左孩子但没有右孩子
bj=0;
else
{
rear++;//右孩子进队
Qu[rear]=p->rchild;
}
else//bj=0:迄今为止,已有节点缺孩子
cm=0;//而此时*p节点有左孩子,违反(2)
}
}
return cm;
}
return 1;//把空树当成特殊的完全二叉树
}
- 设计一个算法,判断一个二叉树是否为完全二叉树
- 判断一个树是否为完全二叉树
- 判断一个树为完全二叉树
- 判断一个二叉树是否是完全二叉树
- 判断一个二叉树是否是完全二叉树
- 编写一个判断二叉树是否为完全二叉树的C语言函数
- 判断一个二叉树是否为BST
- 判断一个二叉树是否为对称二叉树
- 判断一个二叉树是否为满二叉树
- 如何判断一个二叉树是否为平衡二叉树。
- C++算法之 判断是否为完全二叉树
- 判断一棵树是否是一个完全二叉树?
- 判断一棵树是否为完全二叉树
- 判断是否为完全二叉树
- 判断一棵树是否为完全二叉树
- 判断是否为完全二叉树
- 判断一棵树是否为完全二叉树
- 判断是否为完全二叉树
- Node.js真的无所不能?那些不适用的应用领域分析
- Android布局之SurfaceView与控件结合
- Leetcode233-Number of Digit One
- android之View和SurfaceView
- TF-IDF算法
- 设计一个算法,判断一个二叉树是否为完全二叉树
- C++面试题by hht
- WebStorage简易Web留言板
- Android Studio环境搭建
- 动态规划解决整数划分的问题
- linux防火墙
- 关于Actionbar重写的假设
- 记一次代码部署时遇到的问题
- Adding a WebPart to a SharePoint 2013 Master Page