当前位置:网站首页>对称的二叉树【树的遍历】

对称的二叉树【树的遍历】

2022-07-07 01:25:00 MC快乐的苦Xiao怕


思路:dfs遍历n个节点,判断是否对称:

#include <bits/stdc++.h>

using namespace std ;

const int N = 10000010 ;
int l[N] , r[N] , a[N] ;
int m , ans = 1 ;
bool flag ;
inline int dfs (int x , int y , int s)
{
    
    if (x == -1 && y == -1) return 0 ;
    if (x == -1 || y == -1 && x != y)
    {
    
        flag = true ;
        return 0 ;
    }
    if (a[x] != a[y])
    {
    
        flag = true ;
        return 0 ;
    }
    return dfs (l[x] , r[y] , 2) + dfs (r[x] , l[y] , 2) + s ;
}
int main ()
{
    

    
    scanf ("%d" , & m) ;
    for (int i = 1; i <= m; i++) scanf ("%d" , & a[i]) ;
    for (int i = 1; i <= m; i++) scanf ("%d%d" , & l[i] , & r[i]) ;
    for (int i = 1; i <= m; i++)
    {
    
        int s = dfs (l[i] , r[i] , 3) ;
        if (s > ans && flag == false) ans = s ;
        flag = false ;
    }
    printf ("%d" , ans) ;


	return 0 ;
}

原网站

版权声明
本文为[MC快乐的苦Xiao怕]所创,转载请带上原文链接,感谢
https://xiaoguogsc.blog.csdn.net/article/details/125606650