编写算法,判断一颗二叉树是否是完全二叉树

2024-11-25 20:21:39
推荐回答(4个)
回答1:

#include
#include
#define Max 100

typedef struct Node
{
char data;
struct Node * LChild,*RChild;
}BiTNode,*BiTree;

void CreateBiTree(BiTree * bt)
{
char ch;
ch=getchar();
if(ch==10)ch=getchar();//如果为 回车换行 读取下一个字符
if(ch=='.') *bt=NULL; //如果为 . 代表此节点为空
else
{
* bt=(BiTree)malloc(sizeof(BiTNode));
(* bt)->data=ch; //赋值
CreateBiTree(&((* bt)->LChild));
CreateBiTree(&((* bt)->RChild));
}
}

bool fullBiTree(BiTree b)
{
if(b->LChild==NULL && b->RChild==NULL)return true;// 如果左右子树为空,返回真
if(b->LChild==NULL || b->RChild==NULL)return false;// 如果左右子树只有一个为空,返回假
return fullBiTree(b->LChild) && fullBiTree(b->RChild);// 通过递归,返回
}

void main()
{
printf("请依次输入字符\n");
BiTree b;
CreateBiTree(&b); //创建二叉树
bool cm=fullBiTree(b);
if(cm)printf("´此二叉树为完全二叉树\n");
else printf("´此二叉树不是完全二叉树\n");
}

回答2:

上面那位给出的好像是判断满二叉树的方法……

完全二叉树和满二叉树还是不完全一样的……
给你一个参考思路:类似于按层遍历的方式,发现空节点之后看看其后还有没有树节点。

回答3:

假设为完全二叉树
找到第一个非叶子结点,判断其是否是只有左孩子或左右孩子都有。
此后判断其前面的结点是否都有左右孩子。

回答4:

可以检验一棵树中有0个儿子,1个儿子,2个儿子的节点数a,b,c。
则应满足b=0,a=c+1