//二叉树的应用:二叉树的构造、遍历。
//2008.04.12
#include<stdio.h>
#include<iostream>
using namespace std;
struct binaryTreeNode
{
char data;
struct binaryTreeNode *lefttree,*righttree;
};
typedef struct binaryTreeNode BinaryTree;
char ch=' ';
void CreateTree(BinaryTree *&tree)
{
if(ch!='\n')
{ ch=getchar();
if(ch=='\n')
return;
if(ch=='.')
tree=NULL;
else
{
tree=new BinaryTree;
tree->data=ch;
tree->lefttree=NULL;
tree->righttree=NULL;
CreateTree(tree->lefttree);
CreateTree(tree->righttree);
}
}
else return;
}
void PreOrder(BinaryTree *tree)
{
if(tree!=NULL)
{
putchar(tree->data);
PreOrder(tree->lefttree);
PreOrder(tree->righttree);
}
}
void InOrder(BinaryTree *tree)
{
if(tree!=NULL)
{
InOrder(tree->lefttree);
putchar(tree->data);
InOrder(tree->righttree);
}
}
void PostOrder(BinaryTree *tree)
{
if(tree!=NULL)
{
PostOrder(tree->lefttree);
PostOrder(tree->righttree);
putchar(tree->data);
}
}
int main()
{
BinaryTree *t=NULL;
cout<<"(输入时以前序和完全二叉树的形式,空结点用'.'代替,遇到叶子结点时加输两个'.')"<<endl;
cout<<"请输入一串字符串:"<<endl;
CreateTree(t);
cout<<"按前序遍历:"<<endl;
PreOrder(t);
cout<<endl;
cout<<"按中序遍历:"<<endl;
InOrder(t);
cout<<endl;
cout<<"按后序遍历:"<<endl;
PostOrder(t);
cout<<endl;
return 0;
}