示例代码:
#include<iostream>
using namespace std;
struct BTNode
{
int key;
BTNode *lchild;
BTNode *rchild;
};
void Inorder(BTNode *s) //中序遍历
{
BTNode *stacks[100];
BTNode *p;
int top=-1;
stacks[++top]=s;
while(top>=0)
{
while(stacks[top]!=NULL)
{
p=stacks[top]->lchild;
stacks[++top]=p;
}
top--;
if(top>=0)
{
cout<<stacks[top]->key<<endl;
p=stacks[top];
stacks[top]=p->rchild;
}
}
}
void preorder(BTNode *s) //前序遍历
{
BTNode *stacks[100];
BTNode *p;
int top=-1;
stacks[++top]=s;
cout<<s->key<<endl;
while(top>=0)
{
while(stacks[top]!=NULL)
{
p=stacks[top]->lchild;
stacks[++top]=p;
if(p!=NULL)
cout<<p->key<<endl;
}
top--;
if(top>=0)
{
p=stacks[top];
stacks[top]=p->rchild;
if(p->rchild!=NULL)
cout<<p->rchild->key<<endl;
}
}
}
void postorder(BTNode *s) //后序遍历
{
BTNode *stacks[100],*p;
int flag,top=-1;
do
{
while(s!=NULL)
{
top++;
stacks[top]=s;
s=s->lchild;
}
p=NULL;
flag=1;
while(top>=0 && flag)
{
s=stacks[top];
if(s->rchild==p)
{
cout<<s->key<<endl;
p=s;
top--;
}
else
{
s=s->rchild;
flag=0;
}
}
} while(top>=0);
}
int main()
{
BTNode g={7,NULL,NULL},h={8,NULL,NULL},d={4,NULL,NULL},e={5,&g,&h},f={6,NULL,NULL},b={2,&d,&e},c={3,&f,NULL},a={1,&b,&c};
Inorder(&a);
preorder(&a);
postorder(&a);
return 0;
}