1 递归版
2 迭代版#1
3 迭代版#2
\
4 迭代版#3
待补充
实现
#include<queue>
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
typedef struct node
{
struct node *lc;
struct node *rc;
char date;
}bintree,*tree;
stack<tree> s;
void createtree(tree &T)
{
char c;
cin>>c;
if(c=='#')
T=NULL;
else{
T=new bintree;
T->date=c;
createtree(T->lc);
createtree(T->rc);
}
}
void inprint(tree T) // 递归版
{
if(T){
inprint(T->lc);
cout<<T->date;
inprint(T->rc);
}
}
void go(tree T)
{
while(T){
s.push(T);
T=T->lc;
}
}
void intreeprint1(tree T) // 迭代版#1
{
while(true){
go(T);
if(s.empty()) break;
T=s.top();s.pop();
cout<<T->date;
T=T->rc;
}
}
void intreeprint2(tree T) // 迭代#2,与迭代#1等价
{ while(true){
if(T){
s.push(T);
T=T->lc;
}
else if(!s.empty()){
T=s.top();
s.pop();
cout<<T->date;
T=T->rc;
}
else
break;
}
}
int main()
{
tree T;
createtree(T);
inprint(T);
cout<<endl;
intreeprint1(T);
cout<<endl;
intreeprint2(T);
}