atoi函数与之前的atof函数一样的函数头,atof是转换为double,而atoi转换为整数。
这道题目由于序号可能为两位数,所有要输入字符串,而不是字符。
#include<cstdio>
#include<stdlib.h>
using namespace std;
const int maxn = 25;
int n;
struct node
{
int left, right;
}Node[maxn];
bool notroot[maxn] = { 0 };
int strtonum(char s[])
{
if (s[0] == '-') return -1;
else
{
int num = atoi(s);
notroot[num] = 1;
return num;
}
}
int findroot()
{
for (int i = 0; i < n; i++)
{
if (notroot[i] == 0) return i;
}
}
int last,maxindex=0;
void preorder(int root,int index)
{
if (root == -1) return;
if (index > maxindex)
{
maxindex = index;
last = root;
}
preorder(Node[root].left, 2 * index);
preorder(Node[root].right, 2 * index + 1);
}
int main()
{
scanf("%d", &n);
char left[3], right[3];
for (int i = 0; i < n; i++)
{
getchar();
scanf("%s %s", &left, &right);
Node[i].left= strtonum(left);
Node[i].right= strtonum(right);
}
int root = findroot();
preorder(root,1);
if (maxindex != n)printf("NO %d", root);
else printf("YES %d", last);
return 0;
}