两个测试点过不去
大体思路就这样
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
const int MAX = 30;
struct node{
int lchild;
int rchild;
}node[MAX];
bool exist[MAX];
int n , root;
vector<int> level;
void init(){
for(int i=0;i<MAX;i++){
exist[i]=false;
}
}
void levelorder(int root){
int p=root,flag=0;
queue<int> q;
q.push(p);
while(!q.empty()){
p=q.front();
q.pop();
level.push_back(p);
if(flag==0){
if(node[p].lchild!=-1) q.push(node[p].lchild);
else flag=1;
if(node[p].rchild!=-1&&flag==0) q.push(node[p].rchild);
else flag=1;
}
}
}
int main(){
init();
cin>>n;
for(int i=0;i<n;i++){
char left,right;
getchar();
left=getchar();
if(left!='-'){
node[i].lchild=left-'0';
exist[node[i].lchild]=true;
}
else node[i].lchild=-1;
getchar();
right=getchar();
if(right!='-'){
node[i].rchild=right-'0';
exist[node[i].rchild]=true;
}
else node[i].rchild=-1;
}
for(int i=0;i<n;i++){
if(exist[i]==false){
root=i;
break;
}
}
levelorder(root);
if(level.size()!=n){
printf("NO %d\n",root);
}
else{
printf("YES %d\n",level[n-1]);
}
return 0;
}