1、输入:ABD##E##CF#G###(创建二叉树)
2、输出:先序遍历:ABDECFG
中序遍历:DBEAFGC
后序遍历:DEBGFCA
#include<bits/stdc++.h>
#include<conio.h>
using namespace std;
typedef struct BiTreeNode{
char date;
struct BiTreeNode *lchild;
struct BiTreeNode *rchild;
}BiTreeNode ,*BiTree;
typedef struct StackNode{
BiTree tree_node;
struct StackNode *next;
}TreeNode,*TreeList;
void StackPush(TreeList &S,BiTree node)
{
TreeList p=new TreeNode;
p->tree_node=node;
p->next=S;
S=p;
}
void StackPop(TreeList &S,BiTree &T)
{
if(S==NULL)
return ;
T=S->tree_node;
TreeList p=S;
S=S->next;
delete p;
}
bool IsEmpty(TreeList s)
{
return s==NULL?true:false;
}
void CreatBiTree(BiTree &T)
{
char date;
date=getchar();
if(date == '#')
T=NULL;
else{
T=new BiTreeNode;
T->date=date;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}
void F_PreOrderTraverse(BiTree &T)
{
BiTree q=T;
if(q==NULL)
return ;
TreeList s=NULL;
while(!IsEmpty(s) || q)
{
while(q)
{
cout << q->date << " ";
StackPush(s,q);
q=q->lchild;
}
if(!IsEmpty(s))
{
StackPop(s,q);
q=q->rchild;
}
}
}
void F_InOrderTraverse(BiTree &T)
{
BiTree q=T;
if(q==NULL)
return ;
TreeList s=NULL;
while(!IsEmpty(s) || q)
{
while(q)
{
StackPush(s,q);
q=q->lchild;
}
if(!IsEmpty(s))
{
StackPop(s,q);
cout << q->date << " ";
q=q->rchild;
}
}
}
void F_PostOrderTraverse(BiTree &T)
{
if(T==NULL)
return;
BiTree Cur,Post;
Cur=T;
Post=NULL;
TreeList s=NULL;
while(Cur)
{
StackPush(s,Cur);
Cur=Cur->lchild;
}
while(!IsEmpty(s))
{
StackPop(s,Cur);
if(Cur->rchild==NULL || Cur->rchild==Post)
{
cout << Cur->date << " ";
Post=Cur;
}
else{
StackPush(s,Cur);
Cur=Cur->rchild;
while(Cur)
{
StackPush(s,Cur);
Cur=Cur->lchild;
}
}
}
}
int main()
{
BiTree T=NULL;
cout << "请输入:";
CreatBiTree(T);
cout << endl;
cout << "中序遍历:";
F_InOrderTraverse(T);
cout << "\n" << endl;
cout << "先序遍历:";
F_PreOrderTraverse(T);
cout << "\n" << endl;
cout << "后序遍历:";
F_PostOrderTraverse(T);
cout << "\n" << endl;
return 0;
}