二叉树初始化及三种遍历方法

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*Bitree;
int Visit(Bitree e){
printf("%c",e->data);
return 1;
}
int PreOrderTraverse(Bitree &T){
if(T){//先序遍历
   Visit(T);
   PreOrderTraverse(T->lchild);  
   PreOrderTraverse(T->rchild);
   return 1;
}
else return 1;
}
int InOrderTraverse(Bitree &T){
if(T){//中序遍历
   InOrderTraverse(T->lchild);
   Visit(T);
   InOrderTraverse(T->rchild);
   return 1;
}
else return 1;
}
int PosOrderTraverse(Bitree &T){
if(T){   //后序遍历
   PosOrderTraverse(T->lchild);  
   PosOrderTraverse(T->rchild);
   Visit(T);
   return 1;
}
else return 1;
}
int CreateBitree(Bitree &T){
char ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else{
   T=(Bitree)malloc(sizeof(BiTNode));
   T->data=ch;
   CreateBitree(T->lchild);
   CreateBitree(T->rchild);
}
return 1;
}


void main(){
Bitree T;
int i,choice;
printf("请依次输入:ABC@@DE@G@@F@@@,@表示空格\n");
CreateBitree(T);
for(i=1;;i++){
   printf("\n");
   printf("********************************************************\n");
   printf("请选择功能:0-退出,1-先序输出,2-中序输出,3-后序输出:");
   scanf("%d",&choice);
   if(choice==0) break;//程序退出出口!
   switch(choice){
    //switch语句实现功能菜单选择
    case 1:system("cls");PreOrderTraverse(T);break;
    case 2:system("cls");InOrderTraverse(T);break;
    case 3:system("cls");PosOrderTraverse(T);break;
    default:system("cls");printf("输入数据有误!\n");
   }
}
}


你可能感兴趣的:(c,struct,System)