二叉树的遍历(代码实现)

来源:互联网 发布:五十岁为什么叫知天命 编辑:程序博客网 时间:2024/05/05 13:37
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<iostream>using namespace std;typedef char DataType;typedef struct  node //定义树(用链表){    DataType data;    struct node *lchild,*rchild;}BitreeNode;BitreeNode *CreatBitree()//构建二叉树{    char ch;    scanf("%c",&ch);    BitreeNode* T=NULL;    if(ch!=' ') //如果为空就跳出循环    {        T=(BitreeNode*)malloc(sizeof(BitreeNode));//创建空间        T->data=ch;        T->lchild=CreatBitree();        T->rchild=CreatBitree();    }    return T;}void Preorder( BitreeNode *p)//先序历遍{    if(p!=NULL)              //为空就不再遍历了,下同    {        printf("%c",p->data);   //输出历遍过了的数据,下同        Preorder(p->lchild);    //遍历左孩子,下同        Preorder(p->rchild);    //遍历右孩子,下同    }}void Inoder( BitreeNode *p)  //中序遍历{    if(p!=NULL)    {        Inoder(p->lchild);        printf("%c",p->data);        Inoder(p->rchild);    }}void Postorder( BitreeNode *p) //后序遍历{    if(p!=NULL)    {        Postorder(p->lchild);        Postorder(p->rchild);        printf("%c",p->data);    }}void DeleteTree( BitreeNode *p) //释放二叉树{    if(p!=NULL)    {        DeleteTree(p->lchild);        DeleteTree(p->rchild);        free(p);               //释放    }}int main(){    BitreeNode *T=NULL;    printf("请输入一颗二叉树\n");    T=CreatBitree();    printf("\n先序遍历\n");    Preorder(T);    printf("\n中序遍历\n");    Inoder(T);    printf("\n后序遍历\n");    Postorder(T);    DeleteTree(T);    return 0;}