您的位置:首页 > 其它

层序遍历判断是否为完美二叉树

2017-09-07 09:56 239 查看
#include<stdio.h>
#include<stdlib.h>

typedef struct Node
{
char ch;
struct Node *left,*right;
} Node,*Pnode;

void create(Pnode *node)
{
char ch;
ch = getchar();
if(ch=='#')
{
*node = NULL;
}
else
{
*node = (Pnode)malloc(sizeof(Node));
(*node)->ch = ch;
create(&(*node)->left);
create(&(*node)->right);
}
}

int perfect(Pnode node)
{
int i,l=1,flag=0;
if(node==NULL)
return 1;
Pnode nodes[200];
nodes[0]=node;
for(i=0; i<l; i++)
{
if(flag)
{
if(nodes[i]->left!=NULL||nodes[i]->right!=NULL)
return 0;
}
if(nodes[i]->left==NULL)
{
flag = 1;
}
else
{
nodes[l++]=nodes[i]->left;
}
if(flag&&nodes[i]->right!=NULL)
return 0;
if(nodes[i]->right==NULL)
{
flag = 1;
}
else
{
nodes[l++]=nodes[i]->right;
}
}
return 1;
}

int main()
{
Pnode node = NULL;
create(&node);
printf(perfect(node)?"tree is a perfect tree\n":"tree is not a perfect tree\n");
return 0;
}

普通层序遍历

#include<stdio.h>
#include<stdlib.h>

typedef struct Node
{
char ch;
struct Node *left,*right;
} Node,*Pnode;

void create(Pnode *node)
{
char ch;
ch = getchar();
if(ch=='#')
{
*node = NULL;
}
else
{
*node = (Pnode)malloc(sizeof(Node));
(*node)->ch = ch;
create(&(*node)->left);
create(&(*node)->right);
}
}

int visit(Pnode node)
{
int i,l=1,flag=0;
if(node==NULL)
return 0;
Pnode nodes[200];
nodes[0]=node;
for(i=0; i<l; i++)
{
printf("%c",nodes[i]->ch);
if(nodes[i]->left!=NULL){
nodes[l++]=nodes[i]->left;
}
if(nodes[i]->right!=NULL)
{
nodes[l++]=nodes[i]->right;
}
}
return 1;
}

int main()
{
Pnode node = NULL;
create(&node);
visit(node);
return 0;
}




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐