美洲杯波胆_美洲杯波胆赔率
做最好的网站
来自 计算机教程 2019-09-24 00:10 的文章
当前位置: 美洲杯波胆 > 计算机教程 > 正文

GPTL—练习集—006树的遍历【男篮世界杯波胆】

#include<bits/stdc  .h>
using namespace std;

typedef int daTp;//datatype
typedef struct BTNode *position;
typedef position BTree;
const int MAXN=30;
struct BTNode
{
    daTp data;
    position lChild,rChild;
};
BTree build(daTp in[],daTp post[],int n)//利用中序和后序遍历生成二叉树
{
    BTree T=NULL;
    if(n)
    {
        T=new BTNode;
        T->data=post[n-1];
        int ln=0,rn=0;
        bool flag=true;
        daTp lin[MAXN],lpost[MAXN],rin[MAXN],rpost[MAXN];
        for(int i=0;i<n;i  )
        {
            if(in[i]==T->data)
            {
                flag=false;
                continue;
            }
            if(flag) lin[ln  ]=in[i];
            else rin[rn  ]=in[i];
        }
        for(int i=0,k=0;i<n;i  )
        {
            if(i<ln) lpost[i]=post[i];
            else rpost[k  ]=post[i];
        }
        T->lChild=build(lin,lpost,ln);
        T->rChild=build(rin,rpost,rn);
    }
    return T;
}
void levelOrder(BTree T)//层序遍历
{
    if(!T) return;
    queue<BTree>qu;
    qu.push(T);
    BTree tr=T;
    while(!qu.empty())
    {
        tr=qu.front();
        qu.pop();
        cout<<(tr==T?"":" ")<<tr->data;
        if(tr->lChild) qu.push(tr->lChild);
        if(tr->rChild) qu.push(tr->rChild);
    }
}
int main()
{
    int n;
    daTp inOd[MAXN],postOd[MAXN];
    while(cin>>n)
    {
        for(int i=0;i<n;i  )
            cin>>postOd[i];
        for(int i=0;i<n;i  )
            cin>>inOd[i];
        BTree T=build(inOd,postOd,n);
        levelOrder(T);
        cout<<endl;
    }
    return 0;
}

 

本文由美洲杯波胆发布于计算机教程,转载请注明出处:GPTL—练习集—006树的遍历【男篮世界杯波胆】

关键词: