二叉链表的实现与应用

#include
#include
#include
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
#define NULL 0
typedef char TElemType;
typedef int Status;
typedef struct BiTNode{
     
    TElemType data;
    struct BiTNode *lchild,*rchild;//左右孩子的指针域
}BiTNode,*BiTree;
Status InitBiTree(BiTree *T){
     
    *T=NULL;//
    return OK;
}
BiTree MakeBiTree(TElemType e,BiTree L,BiTree R){
     //构造结点
//创建一颗二叉树T,其中根结点的值为e,L和R分别作为左子树,右子树
    BiTree T;
    T=(BiTNode*)malloc(sizeof(BiTNode));
    if(NULL==T)return NULL;
    T->data=e;//根结点的值为e
    T->lchild=L;
    T->rchild=R;
    return T;

}
BiTree CreatBiTree(char *defBT,int *p){
     //先序
//基于先序遍历框架构造二叉树,defBT为树形描述序列,i为defBT当前的下标,初始值为0
        BiTree T;
        TElemType ch;
        ch=defBT[(*p)++];
		if('#'==ch)InitBiTree(&T);
        else {
     
            T=MakeBiTree(ch,NULL,NULL);//构造结点ch
		    T->lchild=CreatBiTree(defBT,p);//利用递归方式构建二叉树
            T->rchild=CreatBiTree(defBT,p);
        }
        return T;
}
Status FirstOderTraverse_VLR(BiTree T){
     
    if(T!=NULL){
     
        printf("%c",T->data);
		InOderTraverse_LVR(T->lchild);
        InOderTraverse_LVR(T->rchild);
    }
}
Status InOderTraverse_LVR(BiTree T){
     
    if(T!=NULL){
     
        InOderTraverse_LVR(T->lchild);
        printf("%c",T->data);
        InOderTraverse_LVR(T->rchild);
    }
}
Status AfterOderTraverse_LRV(BiTree T){
     
    if(T!=NULL){
     
       InOderTraverse_LVR(T->lchild);
        InOderTraverse_LVR(T->rchild);
		 printf("%c",T->data);
    }
}
void main(){
     
    BiTree T1,a,b,c;
	char tree[]="ABD##E##C##";
	int i=0;
   
    if(InitBiTree(&T1)){
     
        printf("初始化成功!\n");
    }else{
     
        printf("初始化失败!\n");
    }
	T1=CreatBiTree(tree,&i);
	
	printf("输出先序列表\n");
    FirstOderTraverse_VLR(T1);
   printf("\n");
  
   printf("输出中序列表\n");
   InOderTraverse_LVR(T1);
   printf("\n");
   
   printf("输出后序列表\n");
   AfterOderTraverse_LRV(T1);
   printf("\n");

}

你可能感兴趣的:(数据结构:二叉链表的实现与应用)