//
// BTreeLink1.c
// tree
//
// 二叉树(链表)(递归)
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTree;
//二叉树的先序遍历
void PreOrderTraverse(BiTree* T){
if(T==NULL)
return ;
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
//二叉树的中序遍历
void InOrderTraverse(BiTree* T){
if(T==NULL)
return ;
InOrderTraverse(T->lchild);
printf("%C ",T->data);
InOrderTraverse(T->rchild);
}
//二叉树的后后序遍历
void PostOrderTraverse(BiTree* T){
if(T==NULL)
return;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ",T->data);
}
//创建一个二叉树
BiTree * CreateBiTree(){
BiTree *T;
char ch=0;
printf("print ");
scanf("%c",&ch);
if(ch=='#'){
T=NULL;
}else{
T = (BiTree*)malloc(sizeof(BiTree));
T->data=ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;
}
void pri(){
printf("\n");
}
int main(){
BiTree * T;
printf("输入树(#代表空节点 AB#C##D##):");
T=CreateBiTree();
printf("前序遍历的结果是:");
PreOrderTraverse (T);
printf("\n中序遍历的结果是:");
InOrderTraverse(T);
printf("\n后序遍历的结果是:");
PostOrderTraverse(T);
pri();
return 0;
}