题目描述

分析:判断所给树是否是完全二叉树,层序遍历二叉树,判断即可
#include<cstdio>
#include<queue>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct Node{
int left=-1,right=-1;
}tree[25];
int n;
bool child [25]={false};
bool layer(int root,int &last){
queue<int> q;
q.push(root);
int num=0;
while (!q.empty())
{
int top=q.front();
q.pop();
if(top!=-1){
num++;
last=top;
}
else{
return num==n;
}
q.push(tree[top].left);
q.push(tree[top].right);
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
string x,y;
cin>>x>>y;
if(x!="-"){
tree[i].left=stoi(x);
child[stoi(x)]=true;
}
if(y!="-"){
tree[i].right=stoi(y);
child[stoi(y)]=true;
}
}
int last=-1;
int root=find(child,child+n,false)-child;
bool flag=layer(root,last);
if(flag)
printf("YES %d\n",last);
else{
printf("NO %d\n",root);
}
}