#include<stdio.h>
struct P{
int L,R;
}s[100005];
int v[100005]={0},flag=0,p=-1,Y,add=0;
int dfs(int k){
if(k==-1) return 1;
int A,B,r;
A=dfs(s[k].L);
B=dfs(s[k].R);
if(A<B) add++,r=s[k].L,s[k].L=s[k].R,s[k].R=r;
return A+B;
}
void check(int k,int u){
if(k==-1){
if(p==-1) p=u,Y=u;
else{
if(p-u!=1 && p-u!=0) flag=1;
p=u;
if(Y-p!=1 && Y-p!=0) flag=1;
}
return;
}
check(s[k].L,u+1),check(s[k].R,u+1);
}
int main(){
int n,i,x,y;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d%d",&s[i].L,&s[i].R);
if(s[i].L!=-1) v[s[i].L]=1;
if(s[i].R!=-1) v[s[i].R]=1;
}
for(i=1;i<=n;i++){
if(!v[i]){
dfs(i);
check(i,0);
break;
}
}
if(flag) puts("-1");
else printf("%d\n",add);
}
沒有留言:
張貼留言