eg.
#include<stdio.h>
typedef struct Tree{
int num;
int l,r;
int size;
}T;
T tree[1000005];
int maxLen=1;
int judgeFullTree(int l,int r) {
if(l==-1&&r==-1) return 1;
if(l==-1) return 0;
if(r==-1) return 0;
if(tree[l].num!=tree[r].num)return 0;
if(judgeFullTree(tree[l].l,tree[r].r)&&judgeFullTree(tree[l].r,tree[r].l)){
return 1;
}
return 0;
}
void dfsTree(int i) {
tree[i].size=1;
if(tree[i].l!=-1){
dfsTree(tree[i].l);
tree[i].size+=tree[tree[i].l].size;
}
if(tree[i].r!=-1){
dfsTree(tree[i].r);
tree[i].size+=tree[tree[i].r].size;
}
}
int main() {
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&tree[i].num);
}
for(int i=1;i<=n;i++){
scanf("%d %d",&tree[i].l,&tree[i].r);
}
dfsTree(1);
for(int i=1;i<=n;i++){
if(judgeFullTree(tree[i].l,tree[i].r)){
maxLen=tree[i].size>maxLen?tree[i].size:maxLen;
}
}
printf("%d",maxLen);
}