#include<iostream>
#include<queue>
#include<set>
using namespace std;
struct node{
int lchild,rchild;
};
node nodes[21];
queue<int>q;
int the_last;
bool flag=true;
void bfs(int cur){
if(nodes[cur].lchild!=-1){
q.push(nodes[cur].lchild);
}
else{ //左子树没有节点 要求后续的节点无孩子 且没有右子树
if(nodes[cur].rchild!=-1) flag=false;
if(nodes[q.front()].lchild!=-1) {
if(q.size()!=0) flag=false;
}
}
if(nodes[cur].rchild!=-1){
q.push(nodes[cur].rchild);
}
if(q.size()>0){
int temp=q.front();
q.pop();
bfs(temp);
}
else{
the_last=cur;
}
}
int main(){
int n;
set<int>find_root;
cin>>n;
getchar();
for(int i=0;i<n;i++){
string s;
getline(cin,s);
int j=0;
int key1=0,key2=0;
if(isdigit(s[0])){
while(s[j]!=' '){
key1=key1*10+s[j]-'0';
j++;
}
}
else {
key1=-1;
j++;
}
j++;
if(isdigit(s[j])){
while(j<s.size()){
key2=key2*10+s[j]-'0';
j++;
}
}
else key2=-1;
find_root.insert(key1);
find_root.insert(key2);
nodes[i].lchild=key1;
nodes[i].rchild=key2;
}
int root=0;
for(;root<n;root++){
if(find_root.count(root)==0) break;
}
bfs(root);
if(flag) cout<<"YES "<<the_last;
else cout<<"NO "<<root;
}
PAT甲级1110 Complete Binary Tree
最新推荐文章于 2024-08-26 20:24:23 发布