c语言打印二叉树,并输出中序

(2)建立一颗二叉树如图所示。要求:输入元素建立二叉树,计算该树高度并输出,按照中序遍历方式输出遍历序列,并按照树状打印二叉树。 可能用到的算法:①用扩展遍历先序序列建立二叉树;②遍历二叉树计算树的高度的递归算法;③按照树状打印二叉树算法;④主函数。

img


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <malloc.h>
#define error 0
#define ok 1

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

int CreateBiTree(BiTree &T)
{
    char ch;
    scanf("%c",&ch);
    if(ch=='#') 
        T=NULL;
    else
    {
        if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
        exit(error);
        T->data=ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
    return ok;
}
void PreOrderBiTree(BiTree T)
{
    if(T)
    {
        printf("%c",T->data);
        PreOrderBiTree(T->lchild);
        PreOrderBiTree(T->rchild);
    }
}
void InOrderBiTree(BiTree T)
{
    if(T)
    {
        InOrderBiTree(T->lchild); //中序遍历左子树
        printf("%c",T->data); //访问结点
        InOrderBiTree(T->rchild); //中序遍历右子树
    }
}
void PostOrderBiTree(BiTree T)
{
    if(T)
    {
        PostOrderBiTree(T->lchild);
        PostOrderBiTree(T->rchild);
        printf("%c",T->data);
    }
}
main()
{
    int i;
    BiTree T;
    printf("\t请输入树的各元素:\n\t");
    CreateBiTree(T);
    do
    {
        printf(" /*****************************/\n");
        printf("\t1键:先序输出; \n\t2键:中序输出;\n\t3键:后序输出!\n\t0键:退出程序!\n");
        printf("\t请输入你的选择:\n\t");
        scanf("%d",&i);
        switch(i)
        {
            case 1:printf("\n\t你选择的是先序输出!! \n");
            printf("\n\t输出结果为:\n");
            printf("\t");
            PreOrderBiTree(T);break;
            case 2:printf("\n\t你选择的是中序输出!! \n");
            printf("\n\t输出结果为:\n");
            printf("\t");
            InOrderBiTree(T);break;
            case 3:printf("\n\t你选择的是后序输出!! \n");
            printf("\n\t输出结果为:\n");
            printf("\t");
            PostOrderBiTree(T);break;
        }
        printf("\n");
    }while(i!=0);
    return 0;
}