排序二叉树应用 2

来源:互联网 发布:name.com 域名转出 编辑:程序博客网 时间:2024/06/05 22:58
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 ;          }    }} } 简述一下思路,中序就是先把左子树放到栈里,再吐出来,再遍历右子数前序就是先存起来左子树,然后打印根节点,最后右子树;后序最麻烦,要先遍历完左右子树,最后打印根节点,所以不仅要判断当前节点,还要关注上一个节点。
原创粉丝点击