2.7

https://pintia.cn/problem-sets/16/problems/666

建树和输出叶结点  一刷

卡了很久23333

尝试用bfs解决

尝试用向量解决

尝试用队列解决

把收藏夹里这个题的几个链接搞完

#include<iostream>
#include<algorithm>
using namespace std;
struct node{
    int a;
    int b;
}t[12];
int build(struct node t[],int n)
{
    int root=-1,check[12]={0},i;
    if(n)
    {
        for(i=0;i<n;i++)
        {
        char c1,c2;
        cin>>c1>>c2;
        if(c1!='-')
        {
            t[i].a=c1-48;
            check[t[i].a]=1;
        }
        else t[i].a=-1;
        if(c2!='-')
        {
            t[i].b=c2-48;
            check[t[i].b]=1;
        }
        else t[i].b=-1;
        }
        for(i=0;i<n;i++)
            if(!check[i])break;
        root = i;
    }
    return root; 
}
void level(struct node t[],int r)
{
    int in=0,out=0,b[100],cnt=0;
    b[in++]=r;
    while(in>out)
    {
        if(t[b[out]].a==-1&&t[b[out]].b==-1)
            {
            if(!cnt++)    printf("%d",b[out]);
            else printf(" %d",b[out]);}
        if(t[b[out]].a!=-1)    b[in++]=t[b[out]].a;
        if(t[b[out]].b!=-1)    b[in++]=t[b[out]].b;
        out++;
    }
}
int main()
{    
    int n;cin>>n;
    int r=build(t,n);
    level(t,r);
}

 

上一篇:对于多线程死锁的银行家算法


下一篇:Gym 102082G What Goes Up Must Come Down