第二次重写的时候出现了一个问题,其实是题目没理解就开始做了,主要是凑巧样例还能通过,实在太巧。
因为要输出的是最大右结点的题目里的编号,而我因为在做题时也给结点编了层序遍历的编号,结果在输出时就输出这个编号了,这显然是不对的。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxv=100;
struct Node{
int id;
Node* left;
Node* right;
}node[maxv];
bool flag[maxv];
int maxid=-1;
int maxindex=-1;
void dfs(Node* root,int index){
if(root==NULL){
return;
}
if(index>maxid){
maxid=index;
maxindex=root->id;
}
dfs(root->left,index*2+1);
dfs(root->right,index*2+2);
}
int main(){
int n;
cin>>n;
memset(flag,false,sizeof(flag));
for(int i=0;i<n;i++){
string v1,v2;
cin>>v1>>v2;
node[i].id=i;
if(v1=="-"){
node[i].left=NULL;
}else{
node[i].left=&node[stoi(v1)];
flag[stoi(v1)]=true;
}
if(v2=="-"){
node[i].right=NULL;
}else{
node[i].right=&node[stoi(v2)];
flag[stoi(v2)]=true;
}
}
int root;
for(int i=0;i<n;i++){
if(flag[i]==false){
root=i;
break;
}
}
dfs(&node[root],0);
if(maxid==n-1){
printf("YES %d",maxindex);
}else{
printf("NO %d",root);
}
return 0;
}