#include <stdio.h>
#include <stdlib.h>
#define MaxSize 20
typedef struct BiNode
{
char data;
struct BiNode *lchild;
struct BiNode *rchild;
}BitNode,*BiTree;
typedef struct
{
BiTree stack[MaxSize];
int top;
}sqstack;
void initStack(sqstack *s)
{
s->top=-1;
}
int emptyStack(sqstack *s)
{
if(s->top==-1)
return 1;
else
return 0;
}
void push(sqstack *s,BiTree t)
{
if(s->top==MaxSize-1)
printf("堆栈已满!");
else
{
s->top++;
s->stack[s->top]=t;
}
}
BiTree pop(sqstack *s)
{
BiTree p;
p=s->stack[s->top];
s->top--;
return p;
}
BiTree getTop(sqstack *s)
{
return s->stack[s->top];
}
void 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);
}
}
void preorder(BiTree t)
{
if(t!=NULL)
{
printf("%c ",t->data);
preorder(t->lchild);
preorder(t->rchild);
}
}
void inorder(BiTree t)
{
if(t!=NULL)
{
inorder(t->lchild);
printf("%c ",t->data);
inorder(t->rchild);
}
}
void postorder(BiTree t)
{
if(t!=NULL)
{
postorder(t->lchild);
postorder(t->rchild);
printf("%c ",t->data);
}
}
int main()
{
BiTree T;
int select=0;
int c,d;
printf("请按照先序序列输入创建二叉树,以#号表示空:");
createBitree(&T);
do{
printf("******************************************\n");
printf("[1] 二叉树先序递归遍历 \n");
printf("[2] 二叉树中序递归遍历 \n");
printf("[3] 二叉树后序递归遍历 \n");
printf("[0] 退出系统*\n");
printf("*******************************************\n");
printf("请选择您想执行的功能:>>");
scanf("%d", &select);
if (select == 0) break;
switch (select){
case 1:
printf("该二叉树递归先序序列为:");
preorder(T);
printf("\n");
break;
case 2:
printf("该二叉树递归中序序列为:");
inorder(T);
printf("\n");
break;
case 3:
printf("该二叉树递归后序序列为:");
postorder(T);
printf("\n");
break;
}
}while(select);
}