PAT甲级1099

来源:互联网 发布:男士休闲短靴 知乎 编辑:程序博客网 时间:2024/06/06 23:58
#include<iostream>#include<queue>#include<algorithm>using namespace std;int lef[100]={0};int righ[100]={0};int value[100]={0};int q[100]={0};int k;bool compare(int a,int b){     return a<b;}int dg(int root){    if(lef[root]==-1)    {        q[root]=value[k++];        if(righ[root]!=-1)        {            dg(righ[root]);        }        else        {            return 0;        }    }    else    {               dg(lef[root]);        q[root]=value[k++];        if(righ[root]!=-1)        {            dg(righ[root]);        }    }       }int main(){    int n=0;    while(scanf("%d",&n)!=EOF)    {                for(int i=0;i<n;i++)        {            scanf("%d %d",&lef[i],&righ[i]);        }        for(int i=0;i<n;i++)        {            scanf("%d",&value[i]);        }        sort(value,value+n,compare);        k=0;        dg(0);        printf("%d",q[0]);        queue<int> qq;        qq.push(0);        int j=0;        while(!qq.empty())        {            j=qq.front();            qq.pop();            if(lef[j]!=-1)            {                qq.push(lef[j]);                            }            if(righ[j]!=-1)            qq.push(righ[j]);            if(j!=0)printf(" %d",q[j]);        }    }    return 0;}

思路:首先使用两个数组分别表达左右子树

然后从小到大排列输入数组,为中序遍历做准备

然后使用递归使用中序遍历顺序构建树(这里应该可以用栈,就不递归了)

使用队列进行层序遍历输出结果

原创粉丝点击