3種類のツリー遍歴のC++コード実現
2263 ワード
void PreOrder(BiTree T)//
{
if(T!=NULL)
{
cout<data<lchild);
PreOrder(T->rchild);
}
}
void SqlPreOrder(BiTree T)//
{
stack s;
BiTree p=T;
while(p || !s.empty())
{
if(p)
{
cout<data<lchild;
}
else
{
p=s.top();
p=p->rchild;
s.pop();
}
}
}
void InOrder(BiTree T)//
{
if(T!=NULL)
{
InOrder(T->lchild);
cout<data<rchild);
}
}
void SqInOrder(BiTree T)//
{
stack s;
BiTree p=T;
while(p || !s.empty())
if(p)
{
s.push(p);
p=p->lchild;
}
else
{
p=s.top();
cout<data<rchild;
}
}
void PostOrder(BiTree T)//
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
cout<data< s;
BiTree p=T,r;
while(p || !s.empty())
{
if(p) //
{
s.push(p);
p=p->lchild;
}
else //
{
p=s.top();//
if(p->rchild && p->rchild!=r)// ,
{
p=p->rchild;
s.push(p);
p=p->lchild; //
}
else // ,
{
cout<data< s;
BiTree p=T;
while(p || !s.empty())
{
if(p && p->lvisited==0) // ,
{
p->lvisited=1;
s.push(p);
p=p->lchild;
}
else
{
p=s.top();
if(p->rchild!=NULL && p->rvisited==0)// ,
{
p->rvisited=1;
p=p->rchild;
}
else //
{
cout<data<
転載:http://aleeee.com/bitreetraveser1.html