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

来源:互联网 发布:linux 如何查看nat 编辑:程序博客网 时间:2024/05/16 05:14
#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;}


 
阅读全文
1 0
原创粉丝点击