二叉树的创立和遍历:

#include<stdio.h>#include<stdlib.h>#define OK 1#define OVERFLOW -2typedef int Status;typedef char ElemType;typedef struct BiNode{    ElemType data;    struct BiNode* lchild, * rchild;}BiTNode, *BiTree;Status Create_Tree(BiTree *T);  //创立Status PreBiTree_Traverse(BiTree T);  //结构和遍历思维:递归Status InBiTree_Traverse(BiTree T);Status PostBiTree_Traverse(BiTree T);int main(){    BiTree T;    int n;    printf("请输出字符(#示意空指针):");    Create_Tree(&T);    printf("1.前序遍历 2.中序遍历 3.后序遍历\n");    printf("请输出遍历形式:");    scanf("%d", &n);    switch (n)    {    case 1:PreBiTree_Traverse(T); break;    case 2:InBiTree_Traverse(T); break;    case 3:PostBiTree_Traverse(T); break;    }    return 0;}Status Create_Tree(BiTree *T)// 前序结构{    char ch;    scanf("%c", &ch);    if (ch == '#')     //用#代表NULL,即虚结点    {        *T = NULL;    }    else    {        *T = (BiTree)malloc(sizeof(BiTNode));        if (!*T)            exit(OVERFLOW);        (*T)->data = ch;        Create_Tree(&(*T)->lchild);        Create_Tree(&(*T)->rchild);    }    return OK;}Status PreBiTree_Traverse(BiTree T)  //前序遍历{    if (T == NULL)        return OVERFLOW;    printf("二叉树的数据为:%c\n", T->data);    PreBiTree_Traverse(T->lchild);    PreBiTree_Traverse(T->rchild);    return OK;}Status InBiTree_Traverse(BiTree T)  //中序遍历{    if (T == NULL)        return OVERFLOW;    InBiTree_Traverse(T->lchild);    printf("二叉树的数据为:%c\n", T->data);    InBiTree_Traverse(T->rchild);    return OK;}Status PostBiTree_Traverse(BiTree T)  //后序遍历{    if (T == NULL)        return OVERFLOW;    PostBiTree_Traverse(T->lchild);    PostBiTree_Traverse(T->rchild);    printf("二叉树的数据为:%c\n", T->data);    return OK;}