1110 Complete Binary Tree (25分)
解题思想
AC代码
#include <iostream>
#include <cstdio>
#include <string>
#include <cstdlib>
using namespace std;
struct node{
int id, l, r, index, level;
}a[100];
int n, maxn = -1, ret;
void dfs(int root, int index){
if (index > maxn){
maxn = index;
ret = root;
}
if (a[root].l != -1) dfs(a[root].l, index*2+1);
if (a[root].r != -1) dfs(a[root].r, index*2+2);
}
int main(){
scanf("%d", &n);
int have[100] = {0}, root = 0;
string l, r;
for (int i = 0; i < n; i++){
a[i].id = i;
cin >> l >> r;
if (l != "-"){
a[i].l = stoi(l);
have[a[i].l] = 1;
}
else a[i].l = -1;
if (r != "-"){
a[i].r = stoi(r);
have[a[i].r] = 1;
}
else a[i].r = -1;
}
while (have[root] == 1) root++;
dfs(root, 0);
if (maxn == n-1) printf("YES %d", ret);
else printf("NO %d", root);
return 0;
}