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); }