代码如下:
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<stack>
#define MAX 10
using namespace std;
typedef struct node{
char data;
node *lchild;
node *rchild;
}BTnode,*BinTree;
typedef struct elem{
char data;
int lchild,rchild;
int tag;
BTnode *link;
}element;
element A[MAX];
BinTree root;
BTnode *p,*pl,*pr;
stack<BinTree>ST;
BTnode* BuildTree(){
for(int i=0;i<MAX;i++){
if(A[i].tag==-1){
p=new BTnode;
p->data=A[i].data;
A[i].tag=1;
A[i].link=p;
}else{
p=A[i].link;
}
if(A[i].lchild!=-1){
int j=A[i].lchild;
pl=new BTnode;
pl->data=A[j].data;
A[j].tag=1;
A[j].link=pl;
p->lchild=pl;
}else{
p->lchild=NULL;
}
if(A[i].rchild!=-1){
int j=A[i].rchild;
pr=new BTnode;
pr->data=A[j].data;
A[j].tag=1;
A[j].link=pr;
p->rchild=pr;
}else{
p->rchild=NULL;
}
}
return A[0].link;
}
void PreOrder(BinTree root){
while(!ST.empty()) ST.pop();
p=root;
while(p!=NULL||(!ST.empty())){
if(p!=NULL){
ST.push(p);
cout<<p->data<<endl;
p=p->lchild;
}else{
p=ST.top();
ST.pop();
p=p->rchild;
}
}
}
void InOrder(BTnode* root){
while(!ST.empty()) ST.pop();
p=root;
while(p!=NULL||(!ST.empty())){
if(p!=NULL){
ST.push(p);
p=p->lchild;
}else{
p=ST.top();
cout<<p->data<<endl;
ST.pop();
p=p->rchild;
}
}
}
typedef struct Node{
BTnode* ptr;
char tag;
}e;
stack<e>Stack;
e w;
void PosOrder(BTnode* root){
p=root;
while(!Stack.empty()) Stack.pop();
while(p!=NULL||(!Stack.empty())){
if(p!=NULL){
w.ptr=p;
w.tag='L';
Stack.push(w);
p=p->lchild;
}else{
w=Stack.top();
Stack.pop();
p=w.ptr;
if(w.tag=='L'){
w.tag='R';
Stack.push(w);
p=p->rchild;
}else{
printf("%c\n",p->data);
//cout<<p->data<<endl;
p=NULL;
}
}
}
}
int main(){
for(int i=0;i<MAX;i++){
scanf("%s %d %d",&A[i].data,&A[i].lchild,&A[i].rchild);
A[i].tag=-1;
A[i].link=NULL;
}
root=BuildTree();
PreOrder(root);
puts("");
InOrder(root);
puts("");
PosOrder(root);
getchar();getchar();getchar();getchar();getchar();
getchar();getchar();getchar();getchar();getchar();
return 0;
}