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); }