题意:给定二叉树上结点信息,要求按照从低到高从左到右输出叶子结点
tip:层序遍历
#include<iostream>
#include<string>
#include<vector>
#include<queue>
using namespace std;
vector<vector<int>>s(12,vector<int>(2));
int main() {
int n;
cin>>n;
vector<int>checked(n,0);
for(int i=0; i<n; ++i) {
string a,b;
cin>>a>>b;
if(a=="-")
s[i][0]=-1;
else {
checked[stoi(a)]=1;
s[i][0]=stoi(a);
}
if(b=="-")
s[i][1]=-1;
else {
checked[stoi(b)]=1;
s[i][1]=stoi(b);
}
}
int st=0;
for(int i=0; i<n; ++i)
if(!checked[i]) {
st=i;
break;
}
vector<int>ans;
queue<int> q;
q.push(st);
while(!q.empty()) {
int t=q.front();
q.pop();
if(s[t][0]==-1&&s[t][1]==-1)
ans.push_back(t);//叶子结点
if(s[t][0]!=-1)
q.push(s[t][0]);//左孩子
if(s[t][1]!=-1)
q.push(s[t][1]);//右孩子
}
cout<<ans[0];
for(int i=1; i<ans.size(); ++i)
cout<<" "<<ans[i];
return 0;
}