求一个二叉树遍历的C语言程序,改程序包含6个算法。

分别是先序递归,先序非递归,中序递归,中序非递归,后序递归,后续非递归算法。该程序中有switch语句
输入1是运行结果出现先序递归,输入2运行为先序非递归的结果,当输入6时出现的是后序非递归的结果。谢谢你们回答!

第1个回答  2014-05-17
void xianxu(Bitree T)
{
if(T)
{
printf("%c",T->Data);
xianxu(T->left);
xianxu(T->right);
}
}
void zhongxu(Bitree T)
{
if(T)
{
zhongxu(T->left);
printf("%c",T->Data);
zhongxu(T->right);
}
}
void houxu(Bitree T)
{
if(T)
{
houxu(T->left);
houxu(T->right);
printf("%c",T->Data);
}
}

 
void  StackInit(SqStack t){
t.top=0;
}
int StackEmpty(SqStack s){
if(s.top==0)
return 1;
else
return 0;
}

void  visite(int s)
{
printf("%d ",s);
}
void push( SqStack s, Bitree p){
s.top++;
s.Elem[s.top]=p;
}
Bitree pop(SqStack s){
Bitree p=s.Elem[s.top];
     s.top--;
 return p;
}
void PreOrderUnrec(Bitree t)
{
    SqStack s;
    StackInit(s);
    Bitree p=t;
    while (p!=NULL || !StackEmpty(s))
    {
        while (p!=NULL)             //遍历左子树
        {
            visite(p->Data);
            push(s,p);
            p=p->left;       
        }//endwhile
         
        if (!StackEmpty(s))         //通过下一次循环中的内嵌while实现右子树遍历
        {
            p=pop(s);
            p=p->right;        
        }//endif
     }//endwhile 
}//PreOrderUnrec
//2.中序遍历非递归算法
void InOrderUnrec(Bitree t)
{
    SqStack s;
    StackInit(s);
    Bitree p=t;
    while (p!=NULL || !StackEmpty(s))
    {
        while (p!=NULL)             //遍历左子树
        {
            push(s,p);
            p=p->left;
        }//endwhile
        if (!StackEmpty(s))
        {
            p=pop(s);
            visite(p->Data);        //访问根结点
            p=p->right;            //通过下一次循环实现右子树遍历
        }//endif   
    }//endwhile
}

你百度一下很多的。。。。。

第2个回答  2014-05-20

函数带1的就是先序遍历

2~中序遍历

3~后续遍历



相似回答