#include <iostream>
#include <stack>
using namespace std;
struct BiTree
{
char data;
bool visted;
BiTree* lchild;
BiTree* rchild;
};
void maketree(BiTree** T)//输入前序序列
{
char c;
cin>>c;
if(c == 'F')
return;
else
{
*T = new BiTree;
(*T)->lchild = NULL;
(*T)->rchild = NULL;
(*T)->data = c;
(*T)->visted = false;
maketree(&(*T)->lchild);
maketree(&(*T)->rchild);
}
}
void pre(BiTree* T)
{
if(T)
{
cout<<T->data;
pre(T->lchild);
pre(T->rchild);
}
}
void intp(BiTree* T)
{
if(T)
{
intp(T->lchild);
cout<<T->data;
intp(T->rchild);
}
}
void post(BiTree* T)
{
if(T)
{
post(T->lchild);
post(T->rchild);
cout<<T->data;
}
}
void Npre(BiTree* T)
{
BiTree *BT = T;
stack<BiTree*> s;
while(BT)
{
s.push(BT);
cout<<BT->data;
BT = BT->lchild;
}
while(!s.empty())
{
BT = s.top()->rchild;
s.pop();
while(BT)
{
cout<<BT->data;
s.push(BT);
BT = BT->lchild;
}
}
}
void Nintp(BiTree* T)
{
BiTree *BT = T;
stack<BiTree*> s;
while(BT)
{
s.push(BT);
BT = BT->lchild;
}
while(!s.empty())
{
BiTree *bt = s.top();
cout<<bt->data;
BT = bt->rchild;
s.pop();
while(BT)
{
s.push(BT);
BT = BT->lchild;
}
}
}
void Npost(BiTree* T)
{
BiTree *BT = T;
stack<BiTree*> s;
while(BT)
{
s.push(BT);
BT = BT->lchild;
}
while(!s.empty())
{
BiTree *bt = s.top();
BT = bt->rchild;
if(!BT || BT->visted)
{
cout<<bt->data;
bt->visted = true;
s.pop();
continue;
}
while(BT)
{
s.push(BT);
BT = BT->lchild;
}
}
}
int main()
{
BiTree *root = NULL;
maketree(&root);
pre(root);
cout<<endl;
Npre(root);
cout<<endl;
intp(root);
cout<<endl;
Nintp(root);
cout<<endl;
post(root);
cout<<endl;
Npost(root);
return 0;
}
使用了一颗层序序列为abcdefg的满二叉树做测试,未发现明显错误