#include<iostream>
#include<malloc.h>
#include<stdio.h>
#define MAXSIZE 20 //最多结点个数
using namespace std;
/*二叉链表*/
typedef struct bnode{
char data;
struct bnode *lchild,*rchild;
}Bnode,* BTree;
BTree CreateBinTree(void); //先序创建二叉树
void PreOrder(BTree t); //递归先序遍历
void InOrder(BTree t); //递归中序遍历
void PostOrder(BTree t); //递归后序遍历
/*主函数*/
int main(){
cout<<"\n请按先序次序输入各结点的值,以#表示空树(输入时可连续输入):\n";
BTree T=CreateBinTree();
if(!T){
cout<<"\n未建立树,请先建树!";
return 0;
}
cout<<"\n\n递归先序遍历:";
PreOrder(T);
cout<<"\n递归中序遍历:";
InOrder(T);
cout<<"\n递归后序遍历:";
PostOrder(T);
return 1;
}
/*先序创建二叉树*/
BTree CreateBinTree(void){
BTree t;
char ch=getchar();
if(ch=='#')
t=NULL;//读入#时,将相应节点指针置空
else{
t=(Bnode *)malloc(sizeof(Bnode));
t->data=ch;
t->lchild=CreateBinTree();//构造二叉树的左子树
t->rchild=CreateBinTree();//构造二叉树的右子树
}
return t;
}
void PreOrder(BTree t){//递归先序遍历
if(t){
cout<<t->data<<" ";
PreOrder(t->lchild);
PreOrder(t->rchild);
}
}
void InOrder(BTree t){//递归中序遍历
if(t){
InOrder(t->lchild);
cout<<t->data<<" ";
InOrder(t->rchild);
}
}
void PostOrder(BTree t){//递归后序遍历
if(t){
PostOrder(t->lchild);
PostOrder(t->rchild);
cout<<t->data<<" ";
}
}