传送

题目说了那么多,到底什么是对称二叉树呢?

就是关于根节点左右镜面对称的二叉树辣。

当然,一棵对称二叉树的子树不一定是对称二叉树,就比如下面这个

它是对称二叉树,但是对于它的子树

这并不是对称二叉树

那怎么判断对称二叉树呢?

对于每一个节点,都进行一次搜索。

在搜索之前,我们可以处理出对任意的一个节点u,以u为根的子树的节点数,即以u为根的子树的大小。

搜索:

首先,如果当前节点 i 的左右子树的节点数不相等,或者是左右儿子的权值不相等,就可以不用继续搜索了,直接返回。

维护两个指针,一个指针指向i的左儿子的右儿子,一个指向右儿子的左儿子,然后再反过来。因为能到这一步,就说明i的左右儿子的权值相等,且左右子树大小相同,就不用管u,v了。

红色为第一次比较时指针的指向,蓝色为第二次比较时指针的指向。

如果y,z的权值相等,子树大小相同,x,l权值相等,子树大小相同,则继续向下搜索,否则就直接返回。(这里考虑子树大小是因为可能出现下面这种情况)

这样虽然u,v的子树大小相同,但是y,z的子树大小不同,所以要考虑子树。

%%%wxl用十几分钟讲完了这道题

代码:

#include <bits/stdc++.h>
using namespace std;
int n,son[][],node[],size[];
int read()
{
char ch=getchar();
int x=;bool f=;
while(ch<''||ch>'')
{
if(ch=='-')f=;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
f?x=-x:x=x;
return x;
}
void dfs(int x)//预处理子树大小(size)
{
size[x]=;
if(son[x][]!=-)
{
dfs(son[x][]);
size[x]+=size[son[x][]];
}
if(son[x][]!=-)
{
dfs(son[x][]);
size[x]+=size[son[x][]];
}
}
bool check(int u,int v)//一个长成check的搜索
{
if(u==-&&v==-)return true;//注意如果左右儿子都不存在,那这是个叶节点,也是对称二叉树
if(size[u]!=size[v])return false;
if(u!=-&&v!=-&&node[u]==node[v]&&check(son[u][],son[v][])&&check(son[u][],son[v][]))//分别对上图的红色指针所对应的节点和蓝色指针所对应的节点进行判断
return true;
return false;//其他一些神奇的情况就直接返回false了
}
int main()
{
n=read();
for(int i=;i<=n;i++)
node[i]=read();
for(int i=;i<=n;i++)
{
son[i][]=read();
son[i][]=read();
}
dfs();
int ans=-;
for(int i=;i<=n;i++)
{
if(check(son[i][],son[i][]))//对所有的对称二叉树的节点取最大值
ans=max(ans,size[i]);
}
printf("%d",ans);
}

P5018对称二叉树的更多相关文章

  1. 2021.08.09 P5018 对称二叉树(树形结构)

    2021.08.09 P5018 对称二叉树(树形结构) [P5018 NOIP2018 普及组] 对称二叉树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 求一棵子树,关 ...

  2. 洛谷P5018 对称二叉树——hash

    给一手链接 https://www.luogu.com.cn/problem/P5018 这道题其实就是用hash水过去的,我们维护两个hash 一个是先左子树后右子树的h1 一个是先右子树后左子树的 ...

  3. P5018 对称二叉树题解

    题目内容链接: 那么根据题意,上图不是对称二叉树,只有节点7的子树是: 通俗来说,对称二叉树就是已一个节点x为根的子树有穿过x点的对称轴并且对称轴两边的对称点的大小也必须相等,那么这棵树就是对称二叉树 ...

  4. 洛谷P5018 对称二叉树

    不多扯题目 直接题解= = 1.递归 由题目可以得知,子树既可以是根节点和叶节点组成,也可以是一个节点,题意中的对称二叉子树是必须由一个根节点一直到树的最底部所组成的树. 这样一来就简单了,我们很容易 ...

  5. NOIP2018普及T4暨洛谷P5018 对称二叉树题解

    题目链接:https://www.luogu.org/problemnew/show/P5018 花絮:这道题真的比历年的t4都简单的多呀,而且本蒟蒻做得出t4做不出t3呜呜呜... 这道题可以是一只 ...

  6. Luogu P5018 对称二叉树 瞎搞树&哈希

    我的天..普及组这么$hard$... 然后好像没有人用我的垃圾做法,,,好像是$O(n)$,但十分的慢,并且极其暴力$qwq$ 具体来说,就是直接$dfs$求出树高,然后想像出把原来的树补成满二叉树 ...

  7. 洛谷 P5018 对称二叉树(搜索)

    嗯... 题目链接:https://www.luogu.org/problem/P5018 其实这道题直接搜索就可以搜满分: 首先递归把每个点作为根节点的儿子的数量初始化出来,然后看这个节点作为根节点 ...

  8. $P5018 对称二叉树$

    problem 一直忘记给这个题写题解了. 这题挺水的吧. 挺后悔当时没写出来. #ifdef Dubug #endif #include <bits/stdc++.h> using na ...

  9. 【洛谷P5018 对称二叉树】

    话说这图也太大了吧 这题十分的简单,我们可以用两个指针指向左右两个对称的东西,然后比较就行了 复杂度O(n*logn) #include<bits/stdc++.h> using name ...

随机推荐

  1. C#后台获取日期:当天、前七天、后七天

    DateTime.Now.ToString(); //当前时间DateTime.Now.AddDays(7).ToString(); //当前时间加上7天DateTime.Now.AddDays(-7 ...

  2. [Git] 012 rm 命令的补充

    0. 前言 [Git] 007 三棵树以及向本地仓库加入第一个文件 的 "2.5" 有提及 git rm --cached <file> 1. 介绍 git rm &l ...

  3. Bootstrap selectpicker 强制向下

    selectpicker的方向是自适应的,但是有些界面,我们需要强制向下,可以使用属性data-dropup-auto data-dropup-auto="false" 官网上的o ...

  4. Hadoop Map/Reduce

    Hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集.一个Map/Reduce ...

  5. HDFS中DataNode工作机制

    1.DataNode工作机制 1)一个数据块在datanode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据(包括数据块的长度,块数据的校验和,以及时间戳). 2)DataNod ...

  6. 重载与重写、多态——java

    方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式. (1)方法重载是一个类中定义了多 ...

  7. C# System.Web.Caching.Cache类 缓存 各种缓存依赖

    原文:https://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntim ...

  8. Dorado环境启动出错Spring加载不到资源Bean配置 at org.springframework.asm.ClassReader.<init>(Unknown Source)

    ERROR: org.springframework.web.context.ContextLoader - Context initialization failed org.springframe ...

  9. VirtualBox中安装CentOS 7后无法上网问题

    1.在VirtualBox的设置界面,点击“网络”, 将虚拟机的“连接方式”设置为桥接模式, “界面名称”选择笔记本的无线网卡(一般是“wireless Network”的选项) 将“接入网线”勾选上 ...

  10. Django集合Ueditor

    语言版本环境:python3.6 1.win安装步骤: git下载源码https://github.com/zhangfisher/DjangoUeditor 解压DjangoUeditor3-mas ...