P5018 对称二叉树题解
那么根据题意,上图不是对称二叉树,只有节点7的子树是;
通俗来说,对称二叉树就是已一个节点x为根的子树有穿过x点的对称轴并且对称轴两边的对称点的大小也必须相等,那么这棵树就是对称二叉树。
思路也很简单:递归处理每个节点的子树的节点数size,然后枚举每一个节点的子树来判断是否为对称二叉树。如果一边有节点另一边没有就return剪枝,一旦碰到不一样的节点就剪枝。
特别的,单个节点也是一个对称二叉树。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
int read(){//快读
int k = , f = ; char c = getchar();
while(c < '' || c > ''){
if(c == '-') f = -;
c = getchar();
}
while(c >= '' && c <= ''){
k = k * + c - ; c = getchar();
}
return k * f;
}
int val[], size[], ans;
struct zzz {
int l, r;
}node[];
int dfs(int pos) {//
if(pos == -) return ;
size[pos] = dfs(node[pos].l) + dfs(node[pos].r) + ;
return size[pos];
}
bool duichen(int ls, int rs) {//判断对称
if(ls == rs && ls == -) return ;
if(val[ls] == val[rs] && size[ls] == size[rs] && duichen(node[ls].l, node[rs].r) && duichen(node[ls].r, node[rs].l))
return ;
return ;
}
int main(){
int n = read();
for(int i = ; i <= n; ++i) val[i]=read();
for(int i = ; i <= n; ++i)
node[i].l = read(), node[i].r = read();
dfs();
for(int i = ; i <= n; ++i)
if(duichen(node[i].l, node[i].r)) ans = max(ans, size[i]);
printf("%d\n", ans);
return ;
}
完结
P5018 对称二叉树题解的更多相关文章
- NOIP2018普及T4暨洛谷P5018 对称二叉树题解
题目链接:https://www.luogu.org/problemnew/show/P5018 花絮:这道题真的比历年的t4都简单的多呀,而且本蒟蒻做得出t4做不出t3呜呜呜... 这道题可以是一只 ...
- 2021.08.09 P5018 对称二叉树(树形结构)
2021.08.09 P5018 对称二叉树(树形结构) [P5018 NOIP2018 普及组] 对称二叉树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 求一棵子树,关 ...
- 洛谷P5018 对称二叉树——hash
给一手链接 https://www.luogu.com.cn/problem/P5018 这道题其实就是用hash水过去的,我们维护两个hash 一个是先左子树后右子树的h1 一个是先右子树后左子树的 ...
- 洛谷P5018 对称二叉树
不多扯题目 直接题解= = 1.递归 由题目可以得知,子树既可以是根节点和叶节点组成,也可以是一个节点,题意中的对称二叉子树是必须由一个根节点一直到树的最底部所组成的树. 这样一来就简单了,我们很容易 ...
- P5018对称二叉树
传送 题目说了那么多,到底什么是对称二叉树呢? 就是关于根节点左右镜面对称的二叉树辣. 当然,一棵对称二叉树的子树不一定是对称二叉树,就比如下面这个 它是对称二叉树,但是对于它的子树 这并不是对称二叉 ...
- $P5018 对称二叉树$
problem 一直忘记给这个题写题解了. 这题挺水的吧. 挺后悔当时没写出来. #ifdef Dubug #endif #include <bits/stdc++.h> using na ...
- Luogu P5018 对称二叉树 瞎搞树&哈希
我的天..普及组这么$hard$... 然后好像没有人用我的垃圾做法,,,好像是$O(n)$,但十分的慢,并且极其暴力$qwq$ 具体来说,就是直接$dfs$求出树高,然后想像出把原来的树补成满二叉树 ...
- 洛谷 P5018 对称二叉树(搜索)
嗯... 题目链接:https://www.luogu.org/problem/P5018 其实这道题直接搜索就可以搜满分: 首先递归把每个点作为根节点的儿子的数量初始化出来,然后看这个节点作为根节点 ...
- 【洛谷P5018 对称二叉树】
话说这图也太大了吧 这题十分的简单,我们可以用两个指针指向左右两个对称的东西,然后比较就行了 复杂度O(n*logn) #include<bits/stdc++.h> using name ...
随机推荐
- 详析静态网站与动态网站区别(服务器ip dns 端口)
几个基本知识 1.服务器:能够提供服务的机器 取决于机器上所安装的服务软件 1) web服务器:提供web服务(网站访问) 就需要安装web服务软件,Apache,tomcat,iis等 2. ...
- java:Spring框架1(基本配置,简单基础代码模拟实现,spring注入(DI))
1.基本配置: 步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar: 步骤二:编写实体类,DAO及其实现类,Service及其实现类; 步骤三:在src下 ...
- cocos2dx基础篇(28) 布景层Layer的三个子类
[3.x] (1)去掉 "CC" [CCLayerColor] 颜色布景层CCLayerColor有两个父类:CCLayerRGBA.CCBlendProtocol.相信有 ...
- screen重新连接会话
1.# yum -y install screen 2.# screen 3.# /usr/local/kibana/bin/kibana (具体使用案例) 然后按ctrl+a+d组合键,暂时断开s ...
- SQL子连接案例
子查询 何时使用子查询 1. 子查询作为数据源 2. 数据加工 需求:根据不同顾客的所有的账户余额划分区间,进行分组 sql语句实现如下: select 'Small Fry' name , 0 lo ...
- flask第一级
#从flask这个包中导入Flask这个类 #Flask这个类是项目的核心,以后很多操作都是基于这个类的对象 #注册url.注册蓝图等都是基于这个类的对象 from flask import Flas ...
- CF486B OR in Matrix(构造+思维)
CF486B 一道有趣的思维题 由于or的性质可知只要a[i][j]为1那么b中第i行,第j列将都变成1 相反的,如果b[i][j]是0那么a中第i行,第j列都必须是0 根据第二个性质我们可以构造出a ...
- Python 对于分表的操作
在操作数据库的业务里,我们系统采用了orm框架 ,避免了过多的写sql,利用实体对数据库进行操作 需求: 账户系统里的account表是进行了分表,分表规则为accountid进行20取模,测试环境分 ...
- maven坐标Dependencies和Exclusions详解
1.概念介绍 Dependencies:是可选依赖(Optional Dependencies) Exclusions:是依赖排除(Dependency Exclusions) 2.Dependenc ...
- 洛谷 P1801 黑匣子 题解
题面 离线处理: 大体思路就是将数组排序,然后对于第k次询问把不可行的数打上标记,然后从头开始寻找第k个没打标记的点的值(排序后的数组保证了它是第k小的). 实现方法:首先离散化原始数组,得到数组fi ...