二叉树非递归后序遍历的三种办法

本文介绍了三种非递归方法来实现二叉树的后序遍历:方法一是通过双栈构造先序序列,然后转换为后序序列;方法二是分解二叉树,处理左子树后出栈处理右子树;方法三是结合方法一,确保左右孩子都已访问后再输出节点。
摘要由CSDN通过智能技术生成

方法一:

        双栈,利用生成先序序列思路,左——右依次入栈再出栈,得到头——右——左的序列,再将该序列入另一栈再出栈,得到左——右——头序列:

void PostOrder_1(Bitree *T)
{
    TreeStc *st_1=NULL;
    TreeStc *st_2=NULL;
    CreatStack(&st_1);        //栈1;
    CreatStack(&st_2);        //栈2;
    Bitree *t=T;
    PushStack(st_1,*t);        //头节点入栈
    while(!IsEmpty(st_1))        
    {
        t=(Bitree *)malloc(sizeof(Bitree));
        PopStack(st_1,t);        //生成头右左序列
        PushStack(st_2,*t);        //生成左右头序列
        if(t->lch!=NULL)
            PushStack(st_1,*t->lch);
        if(t->rch!=NULL)
            PushStack(st_1,*t->rch);
    }
    for(int i=0;i<LEN;i++)
    {
        Bitree *p=(Bitree *)malloc(sizeof(Bitree));
        PopStack(st_2,p);
        printf("%c\t",p->data);
    }
    free(p);
    DestoryStack(st_1);
    DestoryStack(st_2);
    return;
}

方法二࿱

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值