数据结构实验三:二叉树的遍历

源代码:

#include<stdio.h>
#include<stdlib.h>
#define null 0
#define overflow -2
#define ok 1
#define error 0
typedef struct bitree
{
    int data;    
    struct    bitree *lchild,*rchild;
}bitree;

int visit(char *data)
{
    printf("%c",data);
    return ok;
}

int zhengze(bitree **t)
{
    int l,r;
    if(*t)
    {
        l=(int)(**t).lchild;
        r=(int)(**t).rchild;
        if((l==0&&r==0)||(l!=0&&r!=0));
        else
        {
            printf("这个二叉树不是正则二叉树.");
            return 0;
        }
        l=zhengze(&(**t).lchild);
        if(l==0)return 0;
        r=zhengze(&(**t).rchild);
        if(r==0)return 0;
    return ok;
    }
}

int preordertraverse(bitree **t)
{
     if(*t)
    {
        visit((**t).data);
        preordertraverse(&(**t).lchild);
        preordertraverse(&(**t).rchild);

    }
    return ok;
}

int inordertraverse(bitree **t)
{
     if(*t)
    {
        
        inordertraverse(&(**t).lchild);
        visit((**t).data);
        inordertraverse(&(**t).rchild);

    }
    return ok;
}

int postordertraverse(bitree **t)
{
     if(*t)
    {
        
        postordertraverse(&(**t).lchild);
        postordertraverse(&(**t).rchild);
        
        visit((**t).data);

    }
    return ok;
}

int createbitree(bitree **t)
{
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
        *t=null;
    else
    {
        if(!(*t=(bitree*)malloc(sizeof(bitree))))exit(overflow);
        (**t).data=ch;
        createbitree(&(**t).lchild);
        createbitree(&(**t).rchild);
    }
    return ok;
}

void main()
{
    bitree *tree;
    printf("请输入二叉树的先序遍历序列:(#表示空)\n");
    createbitree(&tree);
    printf("先序遍历:");
    preordertraverse(&tree);
    printf("\n中序遍历:");
    inordertraverse(&tree);
    printf("\n后序遍历:");
    postordertraverse(&tree);
    printf("\n");
    if(zhengze(&tree))                        
        printf("这个二叉树是正则二叉树");
    getchar();
    getchar();
}

 

 

 

 

将如图所示的二叉树输入程序中:

posted @ 2019-12-17 00:04  KatouMegumin  阅读(517)  评论(0编辑  收藏  举报