洛谷 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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Compose UI 之 BottomAppBar 底部应用栏

BottomAppBar 底部应用栏 BottomAppBar 是一个在 Jetpack Compose 中用于创建底部应用栏的组件。它提供了一个高度可定制且功能丰富的底部导航解决方案。 它的使用方式与 TopAppBar 类似。下面的图是 BottomAppBar 的基本样式图。 常见使用场景 BottomAppBar 在应用中常用于…

【JavaScript】使用debugger语句快速开启浏览器调试代码工具

简言 有的时候我们想开启浏览器代码调试功能&#xff0c;这个时候应该使用debugger语句。 debugger debugger 语句调用任何可用的调试功能&#xff0c;例如设置断点。如果没有调试功能可用&#xff0c;则此语句不起作用。 debugger;可以多次使用 debugger语句&#xff0c;使…

蓝桥杯练习系统(算法训练)ALGO-976 P0804字符串压缩

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 编写一个函数void strcompress(char *s)&#xff0c;输入一个字符串&#xff08;只包含小写字母和空格&#xff0c;且长度小于1000&am…

基于springboot社团管理系统的设计与实现

互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#xff0c;劳…

leetcode代码记录(有效的括号

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&…

香港理工大学主办!2024年第八届电力能源系统与应用国际会议(ICoPESA 2024)即将召开!

2024年第八届电力能源系统与应用国际会议&#xff08;ICoPESA 2024&#xff09; 2024年6月24日-26日 中国香港 ICoPESA 2024-Hong Kong (icpesa.org)https://icpesa.org/index.html 会议组织单位 会议出版及检索&#xff1a; 会议录用并注册的论文将由IEEE出版&#xff0c;…

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

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

3、鸿蒙学习-在AGC创建HarmonyOS 项目或应用

项目和应用介绍 关于项目 项目是资源、应用的组织实体。资源包括服务器、数据库、存储&#xff0c;以及您的应用、终端用户的数据等。在您使用部分服务时&#xff0c;您是数据的控制者&#xff0c;数据将按照您设置的数据处理位置来存储在指定区域。 通常&#xff0c;您不需…

SE园区综合实验(未补齐版)

实验要求&#xff1a; 1.局域网存在vlan10和vlan20两个业务vlan&#xff0c;ip网段分别对应192.168.1.0/24和192.168.2.0/24 2.业务vlan可以在所有链路上传输数据 3.sw1和sw2之间的直连链路上配置静态链路聚合实现链路冗余&#xff0c;并提高链路带宽 4.sw3为某接入点二次交…

C# ListView 控件使用

1.基本设置 listView1.Columns.Add("序号", 60); //向 listView1控件中添加1列 同时设置列名称和宽度listView1.Columns.Add("温度", 100); //下同listView1.Columns.Add("偏移", 100);listView1.Columns.Add("分割", 50);listView1…

Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%

亲爱的社区小伙伴们&#xff0c;我们很高兴地向大家宣布&#xff0c;在 3 月 8 日我们引来了 Apache Doris 2.1.0 版本的正式发布&#xff0c;欢迎大家下载使用。 在查询性能方面&#xff0c; 2.1 系列版本我们着重提升了开箱盲测性能&#xff0c;力争不做调优的情况下取得较好…

Nacos安装遇到的问题

Windows安装nacos双击startup.cmd执行出错 改成用cmd窗口输入命令 startup.cmd -m standalone启动之后登录的问题 权限认证失败 没有 命名空间的访问权限&#xff01; 把默认的登录url改成&#xff1a; http://127.0.0.1:8848/nacos/#/login登录之后&#xff0c;点击导入配置…

Postman定义全局变量和环境

Postman定义全局变量和环境 一. 问题二. 配置环境解决 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一. 问题 问题前因&#xff1a;在使用postman调用elasticsearch接口的时候&…

XML 简介及用法详解

XML 是一种用于存储和传输数据的与软件和硬件无关的工具。 什么是XML&#xff1f; XML代表eXtensible Markup Language&#xff08;可扩展标记语言&#xff09;。XML是一种与HTML非常相似的标记语言。XML被设计用于存储和传输数据。XML被设计成具有自我描述性。XML不执行任何操…

VX防撤回以及多开

功能&#xff1a; 打破微信只能登录一个账号的局限&#xff0c;同时让撤回的消息不再神秘 安装步骤 获得文件后&#xff0c;直接双击文件就可以进入到安装界面&#xff0c;软件自动定位安装到D盘&#xff0c;可以省去更改安装位置的操作 点击确定&#xff0c;稍等一会安装成功即…

IDEA自定义Maven仓库

Maven 是一款广泛应用于 Java 开发的工具&#xff0c;其作用类似于一个全自动的 JAR 包管理器&#xff0c;能够方便地导入开发所需的相关 JAR 包。在使用 Maven 进行 Java 程序开发时&#xff0c;开发者能够极大地提高开发效率。以下是关于如何安装 Maven 以及在 IDEA 中配置自…

后渗透--利用ebpf隐藏后门用户

原理 首先我们要搞清楚ssh登陆的流程 先获取到ssh的pid 然后利用strace strace -f -p 830可以看到他打开了/etc/passwd去读取内容 那么我们的思路就很简单&#xff0c;hook ssh进程的read syscall exit,然后篡改返回内容 代码 ebpf // build ignore#include "my…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的日常场景下的人脸检测系统(深度学习模型+PySide6界面+训练数据集+Python代码)

摘要&#xff1a;开发用于日常环境中的人脸识别系统对增强安全监测和提供定制化服务极为关键。本篇文章详细描述了运用深度学习技术开发人脸识别系统的全过程&#xff0c;并附上了完整的代码。该系统搭建在强大的YOLOv8算法之上&#xff0c;并通过与YOLOv7、YOLOv6、YOLOv5的性…

一款针对加解密综合利用后渗透工具-DecryptTools

0x01前言 为什么会写这一款综合加解密工具&#xff0c;因为在很多比赛如果算拿下靶标不仅需要获取服务器权限还需要登录网站后台这时候很多系统要么数据库连接字符串加密&#xff0c;要么登陆用户加密而这款工具就是为了解决问题。加解密功能&#xff1a;该工具不仅有解密还提…

代码随想录算法训练营第四十七天|动态规划|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 文章 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代…