用递归法遍历二叉树
#include <iostream>
using namespace std;
const int MAX_TREE_SIZE = 100;
typedef char TElemType;
typedef TElemType SqBiTree[MAX_TREE_SIZE];
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
int CreateBiTree(BiTree &T)
{
char ch;
cin.get(ch);
if(ch == ' ')
T = NULL;
else
{
if(!(T = (BiTNode*)malloc(sizeof(BiTNode))))
exit(-1);
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return 1;
}
int Visit(TElemType e)
{
if(!e)
return 0;
cout << e;
return 1;
}
int PreOrderTraverse(BiTree T, int (*Visit)(TElemType e))
{
if(T)
{
if(Visit(T->data))
if(PreOrderTraverse(T->lchild, Visit))
if(PreOrderTraverse(T->rchild, Visit))
return 1;
return 0;
}
else
return 1;
}
int InOrderTraverse(BiTree T, int(*Visit)(TElemType e))
{
if(T)
{
if(InOrderTraverse(T->lchild, Visit))
if(Visit(T->data))
if(InOrderTraverse(T->rchild, Visit))
return 1;
return 0;
}
else
return 1;
}
int PostOrderTraverse(BiTree T, int(*Visit)(TElemType e))
{
if(T)
{
if(PostOrderTraverse(T->lchild, Visit))
if(PostOrderTraverse(T->rchild, Visit))
if(Visit(T->data))
return 1;
return 0;
}
else
return 1;
}
int main()
{
BiTree T;
CreateBiTree(T);
PreOrderTraverse(T, Visit);
cout << endl;
InOrderTraverse(T, Visit);
cout << endl;
PostOrderTraverse(T, Visit);
cout << endl;
return 0;
}