#include <string.h>
#include <stdio.h>
#include <vector>
#include <queue>
#include <algorithm>
#include <map>
#include <string>
#include <iostream>
#include <math.h>
using namespace std;
struct node
{
int data;
int left;
int right;
}A[110];
int N,harsh[110];
int change(string str)
{
if(str[0]=='-')return -1;
else
{
int result=0;
for(int i=0;i<str.length();i++)
{
result=result*10+str[i]-'0';
}
return result;
}
}
int last=-1;
bool levelorder(int root)
{
queue<int> q;
q.push(root);
bool flag=false;
bool result=true;
while(!q.empty())
{
int top=q.front();
q.pop();
last=top;
if(A[top].left!=-1)
{
if(flag)result=false;
q.push(A[top].left);
}
else
{
flag=true;
}
if(A[top].right!=-1)
{
if(flag)result=false;
q.push(A[top].right);
}
else
{
flag=true;
}
}
return result;
}
int main()
{
scanf("%d",&N);
for(int i=0;i<N;i++)
{
string c1,c2;
cin>>c1>>c2;
int p1,p2;
p1=change(c1);
p2=change(c2);
A[i].left=p1;
A[i].right=p2;
harsh[p1]=true;
harsh[p2]=true;
}
int root=-1;
for(int i=0;i<N;i++)
{
if(harsh[i]==false)
{
root=i;
break;
}
}
bool flag=levelorder(root);
if(flag)
{
printf("YES %d",last);
}
else
{
printf("NO %d",root);
}
return 0;
}
PAT甲1110 Complete Binary Tree(25 分)
最新推荐文章于 2020-07-18 16:25:01 发布