编辑代码

#include <stdio.h>
#include <stdlib.h>
//二叉树节点结构体
typedef struct  BiTNode
{
    int data;//数据域
    struct BiTNode *lchild,*rchild;//左右节点指针
}BiTNode,*BiTree;
//初始化一个二叉树
void CreateTree(BiTree *T)
{
    *T = (BiTNode *)malloc(sizeof(BiTNode));
    (*T)->data = 1;
    (*T)->lchild=(BiTNode *)malloc(sizeof(BiTNode));
    (*T)->rchild=(BiTNode *)malloc(sizeof(BiTNode));

    (*T)->lchild->data = 2;
    (*T)->lchild->lchild =(BiTNode*)malloc(sizeof(BiTNode));
    (*T)->lchild->rchild = (BiTNode*)malloc(sizeof(BiTNode));
    (*T)->lchild->lchild->data = 4;
    (*T)->lchild->lchild->lchild = NULL;
    (*T)->lchild->lchild->rchild = NULL;
    (*T)->lchild->rchild->data = 5;
    (*T)->lchild->rchild->lchild = NULL;
    (*T)->lchild->rchild->rchild = NULL;
    (*T)->rchild->data = 3;
    (*T)->rchild->lchild = (BiTNode*)malloc(sizeof(BiTNode));
    (*T)->rchild->rchild = (BiTNode*)malloc(sizeof(BiTNode));
    (*T)->rchild->lchild->data = 6;
    (*T)->rchild->lchild->lchild = NULL;
    (*T)->rchild->lchild->rchild = NULL;
    (*T)->rchild->rchild->data =7;
    (*T)->rchild->rchild->lchild = NULL;
    (*T)->rchild->rchild->rchild = NULL;

}
//访问节点操作的函数
void display(BiTNode *elem)
{
    printf("%d ",elem->data);
}
//先序遍历
void PreOrder (BiTree T)
{
    if(T)
    {
        display(T);//访问该节点
        PreOrder(T->lchild);//访问该节点的左孩子
        PreOrder(T->rchild);//访问该节点的右孩子
    }
}
//中序遍历
void InOrder(BiTree T)
{
    if(T)
    {
        InOrder(T->lchild);//递归遍历左子树
        display(T); //访问该节点
        InOrder(T->rchild);
    }
}
//后序遍历
void PostOrder(BiTree T)
{
    if(T)
    {
        PostOrder(T->lchild);//遍历左子树
        PostOrder(T->rchild);//遍历右子树
        display(T);
    }
}
int main()
{
    BiTree Tree;
    CreateTree(&Tree);
    printf("先序遍历:\n");
    PreOrder(Tree);
    printf("\n");
    printf("中序遍历:\n");
    InOrder(Tree);
    printf("\n");
    printf("中序遍历:\n");
    PostOrder(Tree);
    return 0;
}