#include<stdio.h>
#define title "------------------------------Life is a fight!------------------------------------"
typedef char Eletype;
typedef struct BitNode{
struct BitNode *lt;//指向左节点
Eletype data;//根节点的数据
struct BitNode *rt;//指向右节点
} BitNode, *BitPtr;
/*按前序遍历方式生成二叉树
* 无子节点则用空格代替
*/
void CrtBit(BitPtr *pptr)//这里由于需要对指针的地址进行操作(用malloc),所以需要用指针的指针作为形参
{
char c;
scanf("%c",&c);
if(' '==c)
{
*pptr=NULL;
}
else
{
*pptr=malloc(sizeof(BitNode));
(*pptr)->data=c;
CrtBit(&(*pptr)->lt);//注意参数是指针的指针
CrtBit(&(*pptr)->rt);
}
}
/*打印一个节点的数据*/
void VisitBit(Eletype c, int level)
{
printf("%d: %c\n",level, c);
}
//中序遍历
void LDR(BitPtr T,int level)
{
if(NULL!=T){
LDR(T->lt,level+1);
VisitBit(T->data,level);
LDR(T->rt,level+1);
}
}
/*前序遍历*/
void TslBit(BitPtr ptr, int level)
{
if(ptr)
{
VisitBit(ptr->data, level);
TslBit(ptr->lt, level+1);
TslBit(ptr->rt, level+1);
}
}
//后序遍历
void TslBit_2(BitPtr ptr, int level)
{
if(ptr)
{
TslBit_2(ptr->lt, level+1);
TslBit_2(ptr->rt, level+1);
VisitBit(ptr->data, level);
}
}
int main(void)
{
BitPtr ptr;
int level=1;
printf("%s\n\n",title);
printf("Please enter the data:\n");
CrtBit(&ptr);
printf("前序=================\n");
TslBit(ptr, level);
printf("中序=================\n");
LDR(ptr,level);
printf("后续=================\n");
TslBit_2(ptr, level);
return 0;
}