数据结构 二叉树

数据结构实验一个简单的二叉树代码原创

安装提示输入基本没bug,非法输入未过滤。

#include <stdio.h>
#include<stdlib.h>
 struct tnode                        /*定义二叉树存储结构*/
{char data;
 struct tnode*lchild;
 struct tnode*rchild;
};

typedef struct tnode tree;//由节点定义树

void inittree(tree *t)
{
    t->data='\0';
    t->lchild=NULL;
    t->rchild=NULL;
}//初始化树

void createterr(tree *T)//添加数据,递归调用
{
    char c;
    if(T->data!='\0')
        printf("error\n");
    tree *p;
    p=T;
    int a=0;
    if(p->lchild==NULL||p->rchild==NULL)
    {
        fflush(stdin);
        printf("请输入数据:\n");//输入根节点数据
        scanf("%c",&(p->data));
        fflush(stdin);
    }
    if(p->lchild==NULL)//节点左孩子为空
    {
        printf("%c的左孩子为空,是否添加数据y/n\n",p->data);
        scanf("%c",&c);
        fflush(stdin);
        if(c=='y')
        {
            tree *q=(tree *)malloc(sizeof(tree));
            inittree(q);
            p->lchild=q;
            createterr(q);
        }
    }
    if(p->rchild==NULL)//节点右孩子为空
    {
        printf("%c的右孩子为空,是否添加数据y/n\n",p->data);
        scanf("%c",&c);
        fflush(stdin);
        if(c=='y')
        {
            tree *q=(tree *)malloc(sizeof(tree));
            inittree(q);
            p->rchild=q;
            createterr(q);
        }
    }
}

void preorder(tree*t)                /*先序遍历函数*/
{if(t)
   {printf("%c ",t->data);                /*输出根结点数据*/
    preorder(t->lchild);
    preorder(t->rchild);
   }
}

void inorder(tree*t)                 /*中序遍历函数*/
{if(t)
   {inorder(t->lchild);
    printf("%c ",t->data);
    inorder(t->rchild);
   }
}
void postorder(tree*t) /*后序遍历函数*/
{if(t)
   {
    postorder(t->lchild);
    postorder(t->rchild);
    printf("%c ",t->data);
   }
}
int main()
{
    int c=1;
    tree *T1=(tree *)malloc(sizeof(tree));
    for(int a=1;c;a++)
    {
        system("cls");
        printf("第%d次实验\n\n",a);
        inittree(T1);
        createterr(T1);
        preorder(T1);                    /*先序遍历*/
        printf("\n");
        inorder(T1);                    /*中序遍历*/
        printf("\n");
        postorder(T1);                    /*后序遍历*/
        printf("是否继续实验\n1-继续  0-退出\n");
        scanf("%d",&c);
    }
    return 0;
}

 

posted @ 2020-12-11 14:38  wu_yan  阅读(133)  评论(0)    收藏  举报