#include<iostream>
#include<vector>
using namespace std;
struct node{
int l, r;
}a[100];
int maxindex=1,ans;
void dfs(int root,int index){
if(index>maxindex){maxindex=index;ans=root;}
if(a[root].l!=-1) dfs(a[root].l,2*index);
if(a[root].r!=-1) dfs(a[root].r,2*index+1);
}
int main(){
int n,have[100]={0},root=0;
string l,r;
scanf("%d",&n);
for(int i=0;i<n;i++){
cin>>l>>r;
if(l!="-") {
a[i].l=stoi(l);
have[stoi(l)]=1; //左孩子结点有父结点
}
else {a[i].l=-1;}
if(r!="-"){
a[i].r=stoi(r);
have[stoi(r)]=1;
}
else {a[i].r=-1;}
}
while(have[root]==1) root++; //查找没有父节点的结点
dfs(root,1);
if(maxindex==n) cout<<"YES "<<ans;
else cout<<"NO "<<root;
system("pause");
return 0;
}
PAT 1110 Complete Binary Tree (25 分) ans?n-1
于 2022-01-28 21:46:56 首次发布