排序二叉树应用 2

void Btree::FdginOrder(mytree t)//中序非递归遍历
{
if(t==NULL)
    ;
mytree p=t;
stack<mytree> s;
while(!s.empty()||p)
{
    while(p)
    {
        s.push(p);
        p=p->left ;
    }
    if(!s.empty())
    {
        p=s.top();
        s.pop();
        cout<<p->data <<" ";
        p=p->right ;
    }       
}
}
void Btree::FdgpreOrder(mytree t)//前序非递归遍历
{
if(t==NULL)
    ;
mytree p=t;
stack<mytree> s;
while(!s.empty()||p)
{
    while(p)
    {
        cout<<p->data <<" ";
        s.push(p);
        p=p->left ;
    }
    if(!s.empty())
    {
        p=s.top();
        s.pop();
        p=p->right ;
    }       
}
}
void Btree::FdgpostOrder(mytree t)//后序非递归遍历
{
int n;
if(root==NULL)
    ;
stack<mytree> s;
mytree pNow,pLast;
pNow=t;
pLast=NULL;
while(pNow)
{
    s.push(pNow);
    n=pNow->data ;
    pNow=pNow->left ;//将pNow放到左子树 
}
while(!s.empty())
{
    pNow=s.top();
    n=pNow->data ;
    s.pop();
    if(pNow->right ==NULL||pNow->right ==pLast)
    {
        cout<<pNow->data<<" " ;
        pLast=pNow;
        n=pNow->data ;
    }
    else if (pNow->left  == pLast)
    {
        s.push(pNow);
        pNow=pNow->right ;
        n=pNow->data ;
        while(pNow)
        {
            s.push(pNow);
            pNow=pNow->right ;  

        }
    }
} 
} 
简述一下思路,中序就是先把左子树放到栈里,再吐出来,再遍历右子数
前序就是先存起来左子树,然后打印根节点,最后右子树;
后序最麻烦,要先遍历完左右子树,最后打印根节点,所以不仅要判断当前节点,还要关注上一个节点。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值