题目大意:给定每个节点的左右孩子,判断这棵树是不是完全二叉树
如果最大节点编号等于节点数那么就是完全二叉树
#include <iostream>
#include <queue>
#include <unordered_map>
using namespace std;
int n,last,res;
struct Eg
{
string l,r;
}e[100];
unordered_map<int,int>mp;
void dfs(int u,int idx)
{
if(idx > last)
{
last = idx;
res = u;
}
if(e[u].l != "-") dfs(stoi(e[u].l),idx << 1);
if(e[u].r != "-") dfs(stoi(e[u].r),idx << 1 | 1);
}
int main()
{
cin >> n;
for(int i = 0; i < n; i ++)
{
string a,b;
cin >> a >> b;
if(a != "-") mp[stoi(a)] = 1;
if(b != "-") mp[stoi(b)] = 1;
e[i] = {a,b};
}
int u;
for(int i = 0; i < n; i ++) if(!mp[i]) u = i;//根
dfs(u,1);
if(last == n) cout << "YES" << ' ' << res << endl;
else cout << "NO" << ' ' << u << endl;
return 0;
}