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