C语言实现二叉树(以前序遍历的方式创建),输出打印二叉树的前,中,后序遍历

#include<stdio.h>  

#define title "------------------------------Life is a fight!------------------------------------"  

  

typedef char Eletype;  

  

typedef struct BitNode{  

    struct BitNode *lt;//指向左节点  

    Eletype data;//根节点的数据  

    struct BitNode *rt;//指向右节点  

} BitNode, *BitPtr;  

  

/*按前序遍历方式生成二叉树

* 无子节点则用空格代替

*/  

void CrtBit(BitPtr *pptr)//这里由于需要对指针的地址进行操作(malloc),所以需要用指针的指针作为形参  

{  

    char c;  

    scanf("%c",&c);  

    if(' '==c)  

    {  

        *pptr=NULL;  

    }  

    else  

    {  

        *pptr=malloc(sizeof(BitNode));  

        (*pptr)->data=c;  

        CrtBit(&(*pptr)->lt);//注意参数是指针的指针  

        CrtBit(&(*pptr)->rt);  

    }  

}  

  

/*打印一个节点的数据*/  

void VisitBit(Eletype c, int level)  

{  

    printf("%d: %c\n",level, c);  

}  

//中序遍历

void LDR(BitPtr T,int level)

{  

    if(NULL!=T){  

        LDR(T->lt,level+1);  

VisitBit(T->data,level);

        LDR(T->rt,level+1);  

    }  

}

/*前序遍历*/  

void TslBit(BitPtr ptr, int level)  

{  

    if(ptr)  

    {  

        VisitBit(ptr->data, level);  

        TslBit(ptr->lt, level+1);  

        TslBit(ptr->rt, level+1);  

    }  

}  

//后序遍历

void TslBit_2(BitPtr ptr, int level)  

{  

    if(ptr)  

    {  

        TslBit_2(ptr->lt, level+1);  

        TslBit_2(ptr->rt, level+1);  

        VisitBit(ptr->data, level);  

    }  

}  

  

int main(void)  

{  

    BitPtr ptr;  

    int level=1;  

  

    printf("%s\n\n",title);  

    printf("Please enter the data:\n");  

    CrtBit(&ptr);  

printf("前序=================\n");

    TslBit(ptr, level);

printf("中序=================\n");

LDR(ptr,level);

printf("后续=================\n");

    TslBit_2(ptr, level);

return 0;  

猜你喜欢

转载自blog.csdn.net/chentong_123/article/details/80340001