嘻嘻,这题是我做过的哟~(虽然我做时差不多做死了)附代码
#include<bits/stdc++.h> using namespace std; int n,s,Max; struct tree{int num,l,r;bool p;}a[1000005]; bool cmp(int x,int y){ int t,t1; if (x!=y){ if (a[x].num!=a[y].num)return 0; if (a[x].p&&a[y].p)return 1; return cmp(a[x].l,a[y].r)&&cmp(a[x].r,a[y].l); } else return 1; } void f(int x){ ++s; if (!a[x].p){ if (a[x].l)f(a[x].l); if (a[x].r)f(a[x].r); } return; } int main(){ scanf("%d",&n);a[0].p=1; for(int i=1;i<=n;++i)scanf("%d",&a[i].num); for(int i=1;i<=n;++i){ cin>>a[i].l>>a[i].r; if (a[i].l==-1)a[i].l=0; if (a[i].r==-1)a[i].r=0; if (!a[i].l&&!a[i].r)a[i].p=1; } for(int i=1;i<=n;++i){ s=0; if (cmp(a[i].l,a[i].r))f(i); Max=max(Max,s); } printf("%d\n",Max); return 0; }