洛谷 P5018 对称二叉树

news2024/9/23 15:30:02

题目背景

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.coloradmin.cn/o/1518292.html

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

相关文章

ES6(一):let和const、模板字符串、函数默认值、剩余参数、扩展运算符、箭头函数

一、let和const声明变量 1.let没有变量提升&#xff0c;把let放下面打印不出来&#xff0c;放上面可以 <script>console.log(a);let a1;</script> 2.let是一个块级作用域,花括号里面声明的变量外面找不到 <script>console.log(b);if(true){let b1;}//und…

Ubuntu系统的安装及基础操作

目录 一、VMware虚拟机安装Ubuntu20.04过程 1、安装前的准备工作 2、VMware虚拟机创建Ubuntu操作系统 步骤一&#xff1a;以管理员的身份运行VMware虚拟机 步骤二&#xff1a;新建虚拟机 步骤三&#xff1a;选择类型配置 步骤四&#xff1a;选择安装客户机操作系统 步骤…

一文解答:wifi贴码推广什么时候开始的?

随着互联网的快速发展和智能手机的普及&#xff0c;人们的生活方式也在发生着翻天覆地的变化&#xff0c;对于网络连接的需求也变得越来越迫切。在这样的背景下&#xff0c;WiFi贴码推广作为一种便捷的网络连接方式逐渐流行起来。那么&#xff0c;WiFi贴码推广究竟是什么时候开…

PostgreSQL - 查看表膨胀空间

目录 使用pgstattuple插件查看表膨胀空间 死元组&膨胀系数清理 查看表占用磁盘空间大小是如何组成的 什么是fms和vm&#xff1f; 什么是TOAST&#xff1f; 查看表和其关联的TOAST表的oid的关系 方法一 方法二 参考文档 使用pgstattuple插件查看表膨胀空间 select…

Clickhouse 单机部署安装

前言 在大数据的时代背景下&#xff0c;数据的处理和分析能力成为企业竞争力的关键。ClickHouse&#xff0c;作为一款由俄国Yandex公司开发的分布式数据分析型数据库&#xff0c;凭借其卓越的性能和稳定性&#xff0c;赢得了业界的广泛关注。本文将介绍ClickHouse的基本概念、…

中科数安|公司办公终端、电脑文件数据 \ 资料防泄密系统

#中科数安# 中科数安是一家专注于信息安全技术与产品研发的高新技术企业&#xff0c;其提供的公司办公终端、电脑文件数据及资料防泄密系统&#xff08;也称为终端数据防泄漏系统或简称DLP系统&#xff09;主要服务于企业对内部敏感信息的安全管理需求。 www.weaem.com 该系统…

在webapp中手动发布一个应用

部署应用前&#xff0c;我们需要下载Tomcat。 下载官网: Apache Tomcat - Welcome! 1、下载 第一步 : 找到Download目录下的Tomcat8 第二步:选择下载第一个zip链接 2、下载完成后&#xff0c;解压并打开Tomcat文件 3、找到并点击webapp文件 创建一个文件夹 在创建的文件中…

蓝桥杯第十一届电子类单片机组程序设计

目录 前言 单片机资源数据包_2023&#xff08;点击下载&#xff09; 一、第十一届比赛原题 1.比赛题目 2.赛题解读 1&#xff09;计数功能 2&#xff09;连续按下无效按键 二、部分功能实现 1.计数功能的实现 2.连续按下无效按键的处理 3.其他处理 1&#xff09;对于…

【危化品泄漏源定位】基于改进哈里斯鹰优化算法的危化品泄漏源定位算法 溯源定位算法【Matlab代码#63】

文章目录 【获取资源请见文章第7节&#xff1a;资源获取】1. 算法概述2. 原始哈里斯鹰算法&#xff08;HHO&#xff09;3. 改进哈里斯鹰算法&#xff08;IHHO&#xff09;3.1 动态自适应逃逸能量3.2 动态扰动策略 4. 构建源强和位置反算模型5. 部分代码展示6. 仿真结果展示7. 资…

BigDecimal类 --java学习笔记

BigDecimal 用于解决浮点型运算时&#xff0c;出现结果失真的问题 BigDecimal常用构造器和方法&#xff1a; HALF_UP 四舍五入

Qt-QPainter drawText方法不同重载之间的区别

QPainter类的drawText方法有如下重载&#xff1a; void drawText(const QPointF &position, const QString &text) void drawText(const QPoint &position, const QString &text) void drawText(int x, int y, const QString &text) void drawText(co…

人人站CMS后台登不进去解决方案(已解决)

公司有一个网站使用的是人人站CMS&#xff0c;最近发现后台登录不进去&#xff0c;有以下报错 发生以下错误: file get contents(http://www.rrzcms.com/Public/cms/config/config.ison): failed to open stream: HTTP reguest failed! 请求的URL导致内部服务器错误。 如果您反…

三维铁木辛柯梁Matlab有限元编程 | 弹簧支座 | 弹性支撑单元| Matlab源码 | 理论文本

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

茶叶加工厂用什么ERP比较好

茶叶加工厂&#xff0c;作为传统与现代相结合的产业&#xff0c;面临着销售渠道多样化、管理场景复杂化以及数据共享需求迫切等挑战。在这样的背景下&#xff0c;选择一款合适的ERP软件显得尤为重要。那么&#xff0c;茶叶加工厂究竟该选用什么样的ERP系统呢? 在众多ERP软件中…

C# danbooru Stable Diffusion 提示词反推 Onnx Demo

目录 说明 效果 模型信息 项目 代码 下载 C# danbooru Stable Diffusion 提示词反推 Onnx Demo 说明 模型下载地址&#xff1a;https://huggingface.co/deepghs/ml-danbooru-onnx 效果 模型信息 Model Properties ------------------------- ----------------------…

用户案例|向量引擎在携程酒店搜索中的应用场景和探索

Zilliz AI 初创计划是面向 AI 初创企业推出的一项扶持计划&#xff0c;预计提供总计 1000 万元的 Zilliz Cloud 抵扣金&#xff0c;致力于帮助 AI 开发者构建高效的非结构化数据管理系统&#xff0c;助力打造高质量 AI 服务与运用&#xff0c;加速产业落地。访问https://zilliz…

部署prometheus+Grafana可视化仪表盘监控服务

一、部署prometheus及监控仪表盘 简介 Prometheus是开源监控报警系统和时序列数据库(TSDB)。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控&#xff0c;输出被监控组件信息的HTTP接口被叫做expo…

微信公众号测试号里面显示若依前端页面

内网穿透 注册购买内网穿透隧道 https://natapp.cn/ 启动成功 这样就绑定你的本地启动项目 微信公众测试号配置 注册微信公众号测试号 获取access_token&#xff0c;AppID与appsecret 调用微信官方接口生成access_token&#xff08;AppID和AppSecret可在“微信公众平台-设置…

IAB视频广告标准《数字视频和有线电视广告格式指南》之 简介、目录及视频配套广告 - 我为什么要翻译介绍美国人工智能科技公司IAB系列(2)

写在前面 谈及到中国企业走入国际市场&#xff0c;拓展海外营销渠道的时候&#xff0c;如果单纯依靠一个小公司去国外做广告&#xff0c;拉渠道&#xff0c;找代理公司&#xff0c;从售前到售后&#xff0c;都是非常不现实的。我们可以回想一下40年前&#xff0c;30年前&#x…

蓝桥杯--冶炼金属

目录 一、题目 二、解决代码 &#xff08;1&#xff09;版本一&#xff08;报错&#xff1a;超时&#xff09; 代码分析 &#xff08;2&#xff09;版本二&#xff08;不会超时&#xff09; 代码分析 &#xff08;3&#xff09;版本三&#xff08;最终精简版&#xff09;…