C语言数据结构之二叉树的构建及三种遍历方式

二叉树的构建及三种遍历方式,大家需要注意的是二叉树构建是传的是指针的地址,就好比二级指针,先要改变参数的本身,就需要传入参数的地址。

#include
#include
//定义树节点
typedef struct BiTNode{

    char data;
    struct BiTNode * lchild ,*rchild;
}BiTNode ,*BiTree;


void CreateBiTree(BiTree * T)   // 创建树
{
    char ch ;
    ch = getchar();
    if(ch=='#')
        (*T) = NULL;
    else {
        (*T)= (BiTree ) malloc(sizeof(BiTNode));
        (*T)->data = ch;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
    }
}

void PreOrder(BiTree T)
{

    if(T)
    {
        printf("%c ",T->data);    //访问根节点
        if(T->lchild!=NULL)
        PreOrder(T->lchild);     //先序遍历左子树
        if(T->rchild!=NULL)
        PreOrder(T->rchild);      //先序遍历右子树
    }
}

void InOrder(BiTree T)
{
    if(T)
    {
        if(T->lchild!=NULL)     // 中序遍历左子树
            InOrder(T->lchild);
        printf("%c ",T->data);   //访问根节点
        if(T->rchild!=NULL)
            InOrder(T->rchild);     // 中序遍历右子树

    }
}
void PostOrder(BiTree T)
{

    if(T)
    {

        if(T->lchild!=NULL)
            PostOrder(T->lchild);
        if(T->rchild!=NULL)
            PostOrder(T->rchild);
        printf("%c ",T->data);
    }
}




int main()
{

    BiTree T= NULL;
    printf("\n建立一颗二叉树T:\n");

    CreateBiTree(&T);

    int n ;
    printf("\n请输入遍历方式\n1.先序遍历\n2.中序遍历\n3.后序遍历\n");
    while(scanf("%d",&n)!=EOF)
    {
        switch(n)
        {
            case 1:PreOrder(T);break;

            case 2:InOrder(T);break;

            case 3:PostOrder(T);break;

        }
        printf("\n");

    }



    return 0;

}











···

你可能感兴趣的:(C语言)