1110. Complete Binary Tree (25)
#include <stdio.h>
#include <stdlib.h>
struct tree
{
int left;
int right;
}node[21];
int findroot[21];
int TransFuction(char s[])
{
return (s[0]=='-')?-1:atoi(s);
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<n;++i)
{
char sleft[4],sright[4];
scanf("%s %s",sleft,sright);
int l=TransFuction(sleft),r=TransFuction(sright);
node[i].left=l;
node[i].right=r;
if(l!=-1)findroot[l]=1;
if(r!=-1)findroot[r]=1;
}
while(i>=0&&findroot[--i]);
int root=i,s;
int queue[100],front=0,rear=0;
queue[rear++]=root;
while((s=queue[front++])!=-1)
{
queue[rear++]=node[s].left;
queue[rear++]=node[s].right;
}
int check=1;
while(front<rear)
{
s=queue[front++];
if(s!=-1)
{
check=0;break;
}
}
if(check)
{
while(queue[--front]==-1);
printf("YES %d",queue[front]);
}
else printf("NO %d",root);
return 0;
}