#include<iostream>
#include<cstdlib>
using namespace std;
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAX_TREE_SIZE 100//二叉树的最大节点数
typedef int Status;
typedef char TElemType;
typedef TElemType SqBiTree [MAX_TREE_SIZE];//0号单元存储根结点
SqBiTree bt;
typedef struct BiTNode
{
TElemType data;
struct BiTNode * lchild,* rchild;//左右孩子的指针
}BiNTode,*BiTree;
Status CreateBiTree(BiTree &T)
{
char ch;
ch=cin.get();
if(ch==' ') T=NULL;
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
Status PreOrderTraverse(BiTree T,Status(* Visit)(TElemType e))//先序遍历
{
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit)) return OK;
return ERROR;
}
else return OK;
}
Status PrintElement(TElemType e)
{
cout<<e<<endl;
return OK;
}
int main()
{
BiTree T;
CreateBiTree(T);//
PreOrderTraverse(T,PrintElement);
return 0;
}
/*Status InOrderTraverse(BiTree T,Status(* Visit)(TElemType e));//中序遍历
Status PostOrderTraverse(BiTree T,Status(* Visit)(TElemType e));//后序遍历
Status LevelOrderTraverse(BiTree T,Status(* Visit)(TElemType e));//层序遍历*/