二叉树的遍历(代码实现)
来源:互联网 发布:五十岁为什么叫知天命 编辑:程序博客网 时间: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;}