洛谷 P5018 对称二叉树

题目背景

NOIP2018 普及组 T4

题目描述

一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树:

  1. 二叉树;
  2. 将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。

下图中节点内的数字为权值,节点外的 idid 表示节点编号。

现在给出一棵二叉树,希望你找出它的一棵子树,该子树为对称二叉树,且节点数最多。请输出这棵子树的节点数。

注意:只有树根的树也是对称二叉树。本题中约定,以节点 TT 为子树根的一棵“子 树”指的是:节点TT 和它的全部后代节点构成的二叉树。

输入格式

第一行一个正整数 nn,表示给定的树的节点的数目,规定节点编号 1 \sim n1∼n,其中节点 11 是树根。

第二行 nn 个正整数,用一个空格分隔,第 ii 个正整数 v_ivi​ 代表节点 ii 的权值。

接下来 nn 行,每行两个正整数 l_i, r_ili​,ri​,分别表示节点 ii 的左右孩子的编号。如果不存在左 / 右孩子,则以 -1−1 表示。两个数之间用一个空格隔开。

输出格式

输出文件共一行,包含一个整数,表示给定的树的最大对称二叉子树的节点数。

输入输出样例

输入 #1复制

2 
1 3 
2 -1 
-1 -1 

输出 #1复制

1

输入 #2复制

10 
2 2 5 5 5 5 4 4 2 3 
9 10 
-1 -1 
-1 -1 
-1 -1 
-1 -1 
-1 2 
3 4 
5 6 
-1 -1 
7 8

输出 #2复制

3

说明/提示

样例 1 解释


最大的对称二叉子树为以节点 22 为树根的子树,节点数为 11。

样例 2 解释

最大的对称二叉子树为以节点 77 为树根的子树,节点数为 33。

数据规模与约定

本题约定:

层次:节点的层次从根开始定义起,根为第一层,根的孩子为第二层。树中任一节 点的层次等于其父亲节点的层次加 11。

树的深度:树中节点的最大层次称为树的深度。

满二叉树:设二叉树的深度为 hh,且二叉树有 2^h-12h−1 个节点,这就是满二叉树。

完全二叉树:设二叉树的深度为 hh,除第 hh 层外,其它各层的结点数都达到最大 个数,第 hh 层所有的结点都连续集中在最左边,这就是完全二叉树。

本题注意:

空数也是对称二叉树。

在判断数是否是对称二叉树时,需要定义两个树,分别判断两棵树是否为空树。

如果两棵树都为空数,直接return true;

如果两棵树一棵为空树,另一棵为非空树,肯定不是对称的,直接return false;

如果两个条件都满足,判断树的权值是否相等,如果不等,直接return false;

继续判断它们的子树是否满足条件。

使用一个函数计算子树的值。特别注意:要加上一(根节点);

判断是否对称代码如下:

bool same(int now1,int now2){if(now1==-1 && now2==-1){return true;}if(now1==-1 || now2==-1){return false;}if(bt[now1].val!=bt[now2].val){return false;}return same(bt[now1].left,bt[now2].right)	&&	same(bt[now1].right,bt[now2].left);
} 

计算结点个数代码如下:

int cum(int now){if(now==-1){return 0;}return 1+cum(bt[now].left)+cum(bt[now].right);
}

完整代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+2;
struct node{int left,right;		//left表示左子树,right表示右子树;int val;		//val表示每个结点的权值; 
} bt[N];
bool same(int now1,int now2){if(now1==-1 && now2==-1){return true;}if(now1==-1 || now2==-1){return false;}if(bt[now1].val!=bt[now2].val){return false;}return same(bt[now1].left,bt[now2].right)	&&	same(bt[now1].right,bt[now2].left);
} 
int cum(int now){if(now==-1){return 0;}return 1+cum(bt[now].left)+cum(bt[now].right);
}
int main(){int n,ans=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&bt[i].val);}for(int i=1;i<=n;i++){scanf("%d %d",&bt[i].left,&bt[i].right);} for(int i=1;i<=n;i++){if(same(i,i)){ans=max(ans,cum(i));}}cout<<ans<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

window server2012 卸载iis后,远程连接黑屏

原因分析&#xff1a; 因为自己在卸载IIS的时候&#xff0c;不小心卸载了.net framework&#xff0c;系统没有了图形界面&#xff08;由完整模式Full变为了核心模式core&#xff09;&#xff0c;需要重新恢复.net framework4.5。 解决方法分析&#xff1a; 需要将核心模式co…

基于Vue移动端电影票务服务APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 Vue框架 3 1.2 数据库MongoDB 3 1.3 Axios请求 3 1.4 H5、CSS3和JavaScript 4 1.5 本章小结 4 2 系统分析 5 2.1 功能需求 5 2.2 用例分析 5 2.3 用户功能 6 2.4本章小结 6 3 基于Vue电影票务服务APP设计 7 3.1 页面设计 …

YOLOv9改进策略:注意力机制 |通道注意力和空间注意力CBAM | GAM超越CBAM,不计成本提高精度

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;通道注意力和空间注意力CBAM&#xff0c;全新注意力GAM&#xff1a;超越CBAM&#xff0c;不计成本提高精度 改进结构图如下&#xff1a; YOLOv9魔术师专栏 ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️…

Kotlin/Java中String的equals和==

Kotlin/Java中String的equals和 在Java中&#xff0c;如果定义一个常量String和new出一个String对象&#xff0c;是不同的&#xff1a; String s1 "zhang" String s2 new String("zhang") 因为在Java看来&#xff0c;s1只是一个常量&#xff0c;会放在…

Let’s Move Sui , 一起来学习吧

Let’s Move Sui是一个全新的交互式学习平台&#xff0c;通过SuiFrens的帮助教您如何在Sui上构建。设计供新手和经验丰富的开发者使用&#xff0c;Let’s Move Sui提供了一次非凡的Sui开发之旅&#xff0c;利用了Move在Sui上的独特之处&#xff0c;从基于对象的数据模型的基础知…

飞桨图像分割套件PaddleSeg初探

飞桨图像分割套件PaddleSeg初探 PaddleSeg是基于飞桨PaddlePaddle的端到端图像分割套件&#xff0c;内置45模型算法及140预训练模型&#xff0c;支持配置化驱动和API调用开发方式&#xff0c;打通数据标注、模型开发、训练、压缩、部署的全流程&#xff0c;提供语义分割、交互式…

项目性能优化—性能优化的指标、目标

项目性能优化—性能优化的指标、目标 性能优化的终极目标是什么 性能优化的目标实际上是为了更好的用户体验&#xff1a; 一般我们认为用户体验是下面的公式&#xff1a; 用户体验 产品设计&#xff08;非技术&#xff09; 系统性能 ≈ 系统性能 快 那什么样的体验叫快呢…

交换机/路由器的存储介质-华三

交换机/路由器的存储介质-华三 本文主要介绍网络设备的存储介质组成。 ROM(read-only memory&#xff0c;只读存储器) 用于存储 BootROM程序。BootROM程序是一个微缩的引导程序&#xff0c;主要任务是查找应用程序文件并引导到操作系统&#xff0c;在应用程序文件或配置文件出…

Learn OpenGL 10 Assimp+网格+模型

Assimp 一个非常流行的模型导入库是Assimp&#xff0c;它是Open Asset Import Library&#xff08;开放的资产导入库&#xff09;的缩写。Assimp能够导入很多种不同的模型文件格式&#xff08;并也能够导出部分的格式&#xff09;&#xff0c;它会将所有的模型数据加载至Assim…

WebAssembly探索篇(四)emcc和cmake编译opencv复杂案例

文章目录 开发环境工程目录CMakeLists.txtmain.cpp web端index.html效果图 遇到的问题JS与C传值Uncaught TypeError: Module._malloc is not a functioncanvas像素RGBA四通道 经验&&教训参考 最近因为项目原因&#xff0c;研究了一下WebAssembly。2015年上线与JS、HTML…

C语言——详解字符函数和字符串函数(一)

Hi,铁子们好呀&#xff01;今天博主来给大家更一篇C语言的字符函数和字符串函数~ 具体讲的内容如下&#xff1a; 文章目录 &#x1f386;1.字符分类函数&#x1f4af;&#x1f4af;⏩1.1 什么是字符分类函数的&#xff1f;&#x1f4af;&#x1f4af;⏩1.2 字符函数的类型有哪…

基于Python的中医药知识问答系统设计与实现

[简介] 这篇文章主要介绍了基于Python的中医药知识问答系统的设计与实现。该系统利用Python编程语言&#xff0c;结合中医药领域的知识和技术&#xff0c;实现了一个功能强大的问答系统。文章首先介绍了中医药知识的特点和传统问答系统的局限性&#xff0c;然后提出了设计思路…

【Java探索之旅】运算符解析 算术运算符,关系运算符

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、什么是运算符二、算术运算符2.1 基本四则运算&#xff08;-*/%&#xff09;2.2 增…

ThreadLocal基本原理

ThreadLocal基本原理 一、定义 ThreadLocal是java中所提供的线程本地存储机制&#xff0c;可以利用改机制将数据缓存在线程内部&#xff0c;该线程可以在任意时刻、任意方法中获取数据 二、底层原理 ThreadLocal底层是通过ThreadLocalMap来实现的&#xff0c;每个Thread对象中…

Java代码基础算法练习---2024.3.14

其实这就是从我学校的资源&#xff0c;都比较基础的算法题&#xff0c;先尽量每天都做1-2题&#xff0c;练手感。毕竟离我真正去尝试入职好的公司&#xff08;我指的就是中大厂&#xff0c;但是任重道远啊&#xff09;&#xff0c;仍有一定的时间&#xff0c;至少要等我升本之后…

安装nginx

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好&#xff0c;中国大陆使用nginx网站用户有&#xff1a;百度、京东、新浪、网易、腾…

Sui技术帮助Studio Mirai成功实现创意愿景

Brian和Ben Li兄弟对艺术充满热情&#xff0c;通过共同创立的研发工作室Studio Mirai&#xff0c;他们正在探索Web3技术与创意产业的交集。 Studio Mirai的第一个头像类项目&#xff08;profile picture&#xff0c;PFP&#xff09;Tamashi存在于Nozomi World中&#xff0c;这…

备战蓝桥杯Day25 - 二叉搜索树

一、基本概念 二叉搜索树&#xff08;Binary Search Tree&#xff09;&#xff0c;又称为二叉查找树或二叉排序树&#xff0c;是一种具有特定性质的二叉树。 定义&#xff1a;二叉搜索树可以是一棵空树&#xff0c;也可以是具有以下特性的非空二叉树&#xff1a; 若其左子树不…

【Memcached】

memcached 有一个很大的缺陷不能持久化&#xff0c;不能存储在硬盘里 1.NoSQL介绍 NoSQL是对 Not Only SQL、非传统关系型数据库的统称。 NoSQL一词诞生于1998年&#xff0c;2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。 随着互联网时代的到…

基于springboot+vue实现电子商务平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现电子商务平台管理系统演示 研究的目的和意义 据我国IT行业发布的报告表明&#xff0c;近年来&#xff0c;我国互联网发展呈快速增长趋势&#xff0c;网民的数量已达8700万&#xff0c;逼近世界第一&#xff0c;并且随着宽带的实施及降价&#xff0c;每天约有…