对称二叉树

对称二叉树

https://ac.nowcoder.com/acm/problem/21472

月份的题目,现在又不会写了

暴力枚举每一个点作为堆成二叉树的根节点

这样看上去是的,但是却跑得飞快,跑不满

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e6+19;
int n,m,l[maxn],r[maxn],val[maxn],root,ans=1,siz[maxn];
bool dfs(int u)
{
    siz[u]=1;
    if( l[u]!=-1 )
    {
        dfs( l[u] );
        siz[u]+=siz[l[u]];
    }
    if( r[u]!=-1 )
    {
        dfs( r[u] );
        siz[u]+=siz[r[u]];
    }
}
bool isok(int u,int v)
{
    if( u==-1 && v== -1 )    return true;
    if( u!=-1 && v!=-1 && val[u]==val[v] && isok( l[u],r[v])&&isok(r[u],l[v] ) )
        return true;
    return false;
}
int main()
{
    cin >> n ;    
    for(int i=1;i<=n;i++)    cin >> val[i];
    for(int i=1;i<=n;i++)
        cin >> l[i] >> r[i];
    dfs(1);
    for(int i=1;i<=n;i++)
        if( isok( l[i],r[i] ) )
            ans = max( ans,siz[i] );
    cout << ans;
} 
全部评论

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务