#include<bits/stdc++.h>
using namespace std;
typedef char eletype;
typedef struct node{
struct node *left;
struct node *right;
eletype value;
}Treenode,*Treeroot;
//1.先序建树
void crttree(Treeroot *root)
{
eletype c=getchar();
getchar();
if(c!='/')
{
*root=new Treenode;
(*root)->value=c;
crttree(&(*root)->left);
crttree(&(*root)->right);
}
else{
(*root)=NULL;
}
}
//2.非递归中序遍历
void norinorder(Treeroot root){
stack<Treeroot> S;
Treeroot p = root;
while(S.empty()!=true||p!=NULL){
if(p!=NULL){
S.push(p);
p=p->left;
}
else{
p=S.top();
S.pop();
cout<<p->value<<endl;
p=p->right;
}
}
}
//3.非递归后序遍历
void norlasorder(Treeroot root){
stack<Treeroot> S;
Treeroot p = root;
Treeroot q = NULL;
while(S.empty()!=true||p!=NULL){
if(p!=NULL){
S.push(p);
p=p->left;
}
else{
p=S.top();
if(p->right==NULL||p->right==q){
cout<<p->value<<endl;
S.pop();
q=p;
p=NULL;
}
else{
p=p->right;
}
}
}
}
int main()
{
Treeroot roota;
crttree(&roota);
cout<<"中序遍历:"<<endl;
norinorder(roota);
cout<<"后序遍历:"<<endl;
norlasorder(roota);
}
运行结果: