提交时间:2024-01-23 20:28:46

运行 ID: 125662

#include<iostream> using namespace std; int n,tsum,maxs; struct Node{ int data; int cl; int cr; }tree[107]; bool judge(int lr,int rr){ if(lr==-1 && rr==-1){ return true; } if(lr!=-1 && rr==-1){ return false; } if(lr==-1 && rr!=-1){ return false; } if(tree[lr].data!=tree[rr].data){ return false; } if(judge(tree[lr].cl,tree[rr].cr)==true && judge(tree[lr].cr,tree[rr].cl)==true){ return true; } else return false; } void dfs(int root){ tsum++; if(tree[root].cl!=-1){ dfs(tree[root].cl); } if(tree[root].cr!=-1){ dfs(tree[root].cr); } } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>tree[i].data; } for(int i=1;i<=n;i++){ cin>>tree[i].cl>>tree[i].cr; } for(int i=1;i<=n;i++){ if(judge(i,i)==true){ dfs(i); if(tsum>maxs){ maxs=tsum; } } tsum=0; } cout<<maxs<<endl; return 0; }