《数据结构实验1》--二叉树

《数据结构实验1》--二叉树

一、实验目的

  理解并熟悉掌握创建二叉树和实现二叉树的三种遍历

 

二、实验内容

 创建二叉树和实现二叉树的三种遍历

a.  根据提示输入字符型数据创建二叉树,输入值为所有字符型数据

b.  输出为遍历后的每个结点的值的顺序

c.   创建二叉树并能实现二叉树的先序、中序、后序遍历

d.  如果输入数据为:a b c

输出结果为:

            a b c

            b a c

            b c a

程序流程:main()--->aclrscr()--->acreatetree()-->apreorder()-->ainorder()-->apostorder。

源程序:

#include<stdio.h>   /*引入头文件*/
#include<stdlib.h>
#include<string.h>
struct tnode        /*定义二叉树存储结构*/
{
    char data;
    struct tnode*lchild;
    struct tnode*rchild;
};
struct tnode tree;  /*定义二叉树指针*/
void createtree(struct tnode*t)    /*创建函数*/
{
    struct tnode*p=t;    /*把二叉树指针给p*/
    char check;
    if(p->lchild==NULL||p->rchild==NULL)   /*判断左右子树是否为空*/
    {
        printf("Please enter the data:");  /*输入根结点数据*/
        scanf("%c",&(p->data));
        getchar();
    }
    if(p->lchild==NULL)
    {
        printf("%c leftchild is null Add?y/n\n",p->data);  /*左子树空,询问是否创建*/
        scanf("%c",&check);
        getchar();
        if(check=='y')
        {
            struct tnode*q=(struct tnode*)malloc(sizeof(struct tnode)); /*开辟空间*/
            q->lchild=NULL;
            q->rchild=NULL;
            p->lchild=q;	     /*连到二叉树上*/
            createtree(q);
        }
    }
    if(p->rchild==NULL)
    {
        printf("%c rightchild is NULL Add?y/n\n",p->data);  /*右子树空,询问是否创建*/
        scanf("%c",&check);
        getchar();
        if(check=='y')
        {
            struct tnode*q=(struct tnode*)malloc(sizeof(struct tnode)); /*开辟空间*/
            q->lchild=NULL;
            q->lchild=NULL;
            p->rchild=q;	     /*连到二叉树上*/
            createtree(q);

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

    }
}
void postorder(struct tnode*t)   /*后序遍历函数*/
{
    if(t)
    {
        postorder(t->lchild);
        postorder(t->rchild);
        printf("%c ",t->data);
    }
}
int main()
{
    //clrscr();
    system("CLS");              /*清屏函数*/
    tree.lchild=NULL;			/*左子树*/
    tree.rchild=NULL;			/*右子树*/
    createtree(&tree); 			/*创建二叉树*/
    preorder(&tree);			/*先序遍历*/
    printf("\n");
    inorder(&tree);				/*中序遍历*/
    printf("\n");
    postorder(&tree);			/*后序遍历*/
}
<span style="font-family:Microsoft YaHei;">程序运行:
</span> 


你可能感兴趣的:(数据结构,二叉树)