如何判断是否完全二叉树

nandizhu 2008-06-06 05:32:27
这样写,对吗???

typedef struct bitnode
{
char value;
bitnode *left;
bitnode *right;
}*bitree,bitnode;
#include<iostream>
#include<queue>
#include"struct.h"
#define Null 0
using namespace std;
int judge(bitree T)
{
if(T==Null)return 0;
int flag=1;
queue<bitree> q;
bitree p=T;
q.push(p);
while(!q.empty())
{
p=q.front();
q.pop();
if(p==Null)flag=0;
if(p!=Null&&flag==0)return 0;
if(p!=Null)
{
if(p->left==Null&&p->right!=Null)return 0;
q.push(p->left);
q.push(p->right);
}
}
return 1;
}


思路,层次遍厉
结点指针进队列,一旦队列头取出空指针,队列后面的元素全为空指针,否则不是完全二叉树
...全文
274 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lidowx 2008-06-10
  • 打赏
  • 举报
回复
楼主给分
zhongshiqi226 2008-06-07
  • 打赏
  • 举报
回复
版主的程序 都没有一句是 注释 的 真的难读
lidowx 2008-06-07
  • 打赏
  • 举报
回复
我写的递归算法


typedef struct bitnode
{
char value;
bitnode *left;
bitnode *right;
}*bitree,bitnode;

/***********************************************************************
功能:判断以 T 为根节点的二叉树是不是满二叉树
返回:-1不是满二叉树,否则是满二叉树且返回值是二叉树子节点的层数
***********************************************************************/
int judge(bitree T)
{
// 左右节点均为空,是满二叉树
if( NULL == T->left && NULL == T->right)
{
return 0;
}

// 左右节点只有一个为空,不是满二叉树
if( NULL == T->left)
{
return -1;
}

if( NULL == T->right)
{
return -1;
}

int nLeft,nRight;

// 递归判断左右子树是不是满二叉树
nLeft = judge(T->left);
nRight = judge(T->right);


if ( (nLeft == nRight) && (0 <= nLeft) )
{
// 左右子树均为满二叉树,且左右子树的子节点层数相等,该二叉树是满二叉树
// 并返回其子树的层数为左子树的子树层数加一
return (1 + nLeft);
}
else
{
// 不是满二叉树
return -1;
}

}

gezichong 2008-06-06
  • 打赏
  • 举报
回复
没这么复杂吧?
可以先计算出树的高度h
再计算出树的结点数n
如果满足n=2的h次方-1不就可以了。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧