zoukankan      html  css  js  c++  java
  • 对称二叉树

     

    #include<bits/stdc++.h>
    using namespace std;
    int size[10000000],n,a[10000000],son[10000000][2];
    inline void dfs(int u)
    {
    size[u]=1;
    if(son[u][0]!=-1)
    {
    dfs(son[u][0]);
    size[u]+=size[son[u][0]];
    }
    if(son[u][1]!=-1)
    {
    dfs(son[u][1]);
    size[u]+=size[son[u][1]];
    }
    }
    inline bool c(int z,int y)
    {
    if(z==-1&&y==-1)
    return true;
    if(z!=-1&&y!=-1&&a[z]==a[y]&&c(son[z][0],son[y][1])&&c(son[z][1],son[y][0]))
    return true;
    return false;
    }
    int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
    scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;i++)
    {
    scanf("%d%d",&son[i][0],&son[i][1]);
    }
    dfs(1);//计算每个节点的长度。
    int ans=0;
    for(int i=1;i<=n;i++)
    if(c(son[i][0],son[i][1]))
    ans=max(ans,size[i]);

    cout<<ans;
    return 0;
    }

     解法如下:

    用算出每个节点的长度,等会儿结果那一块需要用到。

    再对每一个节点的左右不断比较,如果对称就用这个节点的长度给ans值不断刷新,得到正解。

    如果都是空结点也是算作对称的哟。

  • 相关阅读:
    jquery 总体架构
    字符串字典排序
    浏览器渲染原理
    TCP/IP协议网络模型
    web
    js 继承
    js 模块化
    动画 球
    css z-index
    验证用户是否已经登录和自动登录
  • 原文地址:https://www.cnblogs.com/xxmxxm/p/10806154.html
Copyright © 2011-2022 走看看