- /*
- 实验5:建立一棵二叉树,以前序序列输入,以非空格字符表示结点的值,
- 以空格字符表示空指针;实现该二叉树的前序遍历、中序遍历和后序遍历。
- */
- #include<stdio.h>
- #include<stdlib.h>
- #define OK 1;
- typedef char TElemType;
- typedef int Status;
- //二叉树的存储表示方式
- typedef struct BiTNode{
- TElemType data;
- struct BiTNode *lchild,*rchild;//左右孩子指针
- }BiTNode,*BiTree;
- //创建二叉树,使用前序序列输入数据,空格表示空树
- Status CreateBiTree(BiTree &T){
- char ch ;
- scanf("%c",&ch);
- getchar();
- if(ch == ' ')
- T = NULL;
- else{
- if(!(T = (BiTNode *)malloc(sizeof(BiTNode))))
- exit(0);
- T->data = ch; //生成根节点
- CreateBiTree(T->lchild); //构造左子树
- CreateBiTree(T->rchild); //构造右子树
- }
- return OK;
- }
- //前序遍历
- Status PreOrderTraverse(BiTree T){
- if(T){
- printf("%c",T->data);
- PreOrderTraverse(T->lchild);
- PreOrderTraverse(T->rchild);
- }
- return OK;
- }
- //中序遍历
- Status InOrderTraverse(BiTree T){
- if(T){
- InOrderTraverse(T->lchild);
- printf("%c",T->data);
- InOrderTraverse(T->rchild);
- }
- return OK;
- }
- //后序遍历
- Status PostOrderTraverse(BiTree T){
- if(T){
- PostOrderTraverse(T->lchild);
- PostOrderTraverse(T->rchild);
- printf("%c",T->data);
- }
- return OK;
- }
- //主函数
- void main(){
- BiTree T;
- printf("请按照先序序列输入你的二叉树,空格表示空树\n");
- CreateBiTree(T);
- printf("前序遍历如下:\n");
- PreOrderTraverse(T);
- printf("\n");
- printf("中序遍历如下:\n");
- InOrderTraverse(T);
- printf("\n");
- printf("后序遍历如下:\n");
- PostOrderTraverse(T);
- printf("\n");
- }
By Mr.Z