对称二叉树(牛客\树\递归)***

对称二叉树

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;

int n, ans = 1, h;

struct Node{
    int l, r, val;
}m[N];

bool pan(int l, int r){
    ++h;
    if(l == -1 && r == -1) return 1;
    if(l != -1 && r == -1 || l == -1 && r != -1 || m[l].val != m[r].val) return 0;
    return pan(m[l].l, m[r].r) && pan(m[l].r, m[r].l);
}
void k(int x){
    h = 0;
    if(pan(m[x].l, m[x].r)) ans = max(ans, h);
}

signed main(){
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> m[i].val;
    for(int i = 1; i <= n; ++i) cin >> m[i].l >> m[i].r;
    for(int i = 1; i <= n; ++i) k(i);
    
    cout << ans << endl;
    
    return 0;
}
posted @ 2025-03-18 21:19  awei040519  阅读(11)  评论(0)    收藏  举报