8pts求调
  • 板块学术版
  • 楼主AstraGrace
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/25 19:52
  • 上次更新2024/11/25 21:21:16
查看原帖
8pts求调
1386083
AstraGrace楼主2024/11/25 19:52

对称二叉树

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
struct Node{
    int v;
    int l,r;
}tree[N];
int cnt[N];
int n;
bool check(int l,int r){
    if(l==-1&&r==-1) return true;
    if(l==-1||r==-1) return false;
    if(tree[l].v!=tree[r].v) return false;
    if(check(tree[l].l,tree[r].r)&&check(tree[l].r,tree[r].l)) return true;
    
}
int count(int r){
    if(r==-1) return 0;
    cnt[r]=count(tree[r].l)+count(tree[r].r)+1;
    return cnt[r];
}
int main(){
    scanf("%d",&n);
    for(int i=1; i<=n; i++) scanf("%d",&tree[i].v);
    for(int i=1; i<=n; i++) scanf("%d%d",&tree[i].l,&tree[i].r);
    count(1);
    int maxn=0;
    for(int i=1; i<=n; i++){
        if(check(tree[i].l,tree[i].r)){
            maxn=max(maxn,cnt[i]);
        }
    }
    printf("%d",maxn);
    return 0;
}
2024/11/25 19:52
加载中...