NYNU_省赛选拔题(3)

本文提供了一种算法用于判断给定的二叉树是否为镜像树,并通过实例演示了如何实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

二叉树,若其与自己的镜像完全相同,就称其为镜像树。

是一棵镜像树;

不是镜像树。
现给你一棵二叉树,请你判断其是不是镜像树。

输入

第一行是一个整数数T,表示测试数据有多少组
每组数据第一行是一个正整数n(1<=n<=100),表示二叉树中节点的数量
下面n行,每行有三个正整数a b c(1<=a<=100,0<=b,c<=100),表示以编号a的节点为父节点,它的左孩子节点编号为b,右孩子节点编号为c,若b=0表示没有左孩子节点,c=0表示没有右孩子节点,树的根节点是编号为1的节点,节点的编号都>=1(保证数据中给出的二叉树拓扑结构是合法的)
下面一行是n个正整数vi(1<=vi<=100),表示编号为i的节点的值。

输出

若数据中表示的二叉树是镜像树,输出“Yes”,否则输出“No”,每个输出单独占一行
 

样例输入

2
7
1 2 3
2 4 5
3 6 7
4 0 0
5 0 0
6 0 0
7 0 0
1 2 2 3 4 4 3
5
1 2 3
2 0 4
3 0 5
4 0 0
5 0 0
1 2 2 3 3

样例输出

Yes
No

 

 

 

 1 #include <iostream>
 2 using namespace std;
 3 bool flag=1;
 4 struct node
 5 {
 6     int data;
 7     int lchild,rchild;
 8 
 9 }t[150];
10 void dfs(int r1,int r2)
11 {
12     if(r1==0&&r2==0)
13         return ;
14     else if(r1==0&&r2!=0||r1!=0&&r2==0||t[r1].data!=t[r2].data)
15     {
16         flag=0;
17         return ;
18     }
19     dfs(t[r1].lchild,t[r2].rchild);
20     dfs(t[r1].rchild,t[r2].lchild);
21 }
22 int main()
23 {
24     int i,j,T,n;
25     cin>>T;
26     while(T--)
27     {
28         cin>>n;
29         for(i=1;i<=n;i++)
30         {
31             int k;
32             cin>>k;
33             cin>>t[i].lchild>>t[i].rchild;
34         }
35         for(i=1;i<=n;i++)
36             cin>>t[i].data;    
37         flag=1;
38         dfs(t[1].lchild,t[1].rchild);
39         if(flag)
40             cout<<"Yes"<<endl;
41         else
42             cout<<"No"<<endl;
43     }
44 }

 

转载于:https://www.cnblogs.com/wangmengmeng/p/5271845.html

* Navicat Premium Data Transfer Source Server : localhost_3306 Source Server Type : MySQL Source Server Version : 80039 Source Host : localhost:3306 Source Schema : nynu_db Target Server Type : MySQL Target Server Version : 80039 File Encoding : 65001 Date: 06/05/2025 09:55:29*/SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for goods_nynu-- ----------------------------DROP TABLE IF EXISTS `goods_nynu`;CREATE TABLE `goods_nynu` ( `goods_id` int(0) NOT NULL AUTO_INCREMENT, `goods_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `goods_price` double(10, 2) NULL DEFAULT NULL, `goods_num` int(0) NULL DEFAULT NULL, `goods_type_id` int(0) NULL DEFAULT NULL, PRIMARY KEY (`goods_id`) USING BTREE, INDEX `goods_type_id`(`goods_type_id`) USING BTREE, CONSTRAINT `goods_nynu_ibfk_1` FOREIGN KEY (`goods_type_id`) REFERENCES `type_nynu` (`type_id`) ON DELETE RESTRICT ON UPDATE RESTRICT) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of goods_nynu-- ----------------------------INSERT INTO `goods_nynu` VALUES (1, &#39;测试用男半袖衬衫&#39;, 200.00, 1000, 4);INSERT INTO `goods_nynu` VALUES (2, &#39;测试用男长袖衬衫&#39;, 250.00, 100, 5);-- ------------------------------ Table structure for type_nynu-- ----------------------------DROP TABLE IF EXISTS `type_nynu`;CREATE TABLE `type_nynu` ( `type_id` int(0) NOT NULL AUTO_INCREMENT, `type_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `type_level` int(0) NULL DEFAULT NULL, `type_pid` int(0) NULL DEFAULT NULL, `type_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, PRIMARY KEY (`type_id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of type_nynu-- ----------------------------INSERT INTO `type_nynu` VALUES (1, &#39;男装&#39;, 1, NULL, &#39;|1|&#39;);INSERT INTO `type_nynu` VALUES (2, &#39;女装&#39;, 1, NULL, &#39;|2|&#39;);INSERT INTO `type_nynu` VALUES (3, &#39;衬衫&#39;, 2, 1, &#39;|1|3|&#39;);INSERT INTO `type_nynu` VALUES (4, &#39;半袖衬衫&#39;, 3, 3, &#39;|1|3|4|&#39;);INSERT INTO `type_nynu` VALUES (5, &#39;长袖衬衫&#39;, 3, 3, &#39;|1|3|5|&#39;);SET FOREIGN_KEY_CHECKS = 1;
05-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值