#include <iostream>
#include <cstring>
using namespace std;
int n;
const int N=25;
int l[N],r[N];
int maxk,maxid;
bool hasfather[N];
void dfs(int u,int k){
if(u==-1) return;
if(k>maxk) maxk=k,maxid=u;
if(l[u]!=-1) dfs(l[u],2*k);
if(r[u]!=-1) dfs(r[u],2*k+1);
}
int main(){
cin>>n;
memset(l,-1,sizeof l);
memset(r,-1,sizeof r);
for(int i=0;i<n;i++){//编号从0到n-1
string a,b;cin>>a>>b;
if(a!="-") l[i]=stoi(a),hasfather[l[i]]=true;
if(b!="-") r[i]=stoi(b),hasfather[r[i]]=true;
}
int root=0;
while(hasfather[root]==true) root++;
dfs(root,1);//为了好算左右儿子,root对应编号1
if(maxk==n) printf("YES %d",maxid);
else printf("NO %d",root);
return 0;
}
1110 Complete Binary Tree (25 分)
最新推荐文章于 2024-08-21 18:16:36 发布