7-3 树的同构 (25 分)

简介: 7-3 树的同构 (25 分)

给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。

6cb725403e21bb6418b6cc1f19fb3027.jpg


a0f8a223a5b3a379c909798b9adefa56.jpg

现给定两棵树,请你判断它们是否是同构的。


输入格式:

输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写字母、其左孩子结点的编号、右孩子结点的编号。如果孩子结点为空,则在相应位置上给出“-”。给出的数据间用一个空格分隔。注意:题目保证每个结点中存储的字母是不同的。


输出格式:

如果两棵树是同构的,输出“Yes”,否则输出“No”。


输入样例1(对应图1):

8
A 1 2
B 3 4
C 5 -
D - -
E 6 -
G 7 -
F - -
H - -
8
G - 4
B 7 6
F - -
A 5 1
H - -
C 0 -
D - -
E 2 -


输出样例1:

Yes


输入样例2(对应图2):

1. 8
2. B 5 7
3. F - -
4. A 0 3
5. C 6 -
6. H - -
7. D - -
8. G 4 -
9. E 1 -
10. 8
11. D 6 -
12. B 5 -
13. E - -
14. H - -
15. C 0 2
16. G - 3
17. F - -
18. A 1 4


输出样例2:

No


#include<bits/stdc++.h>
using namespace std;
int a[20],b[20];
int main()
{
    int n,m;
    cin>>n;
    if(n==1)//只有一个节点的情况
    {
        cout<<"No\n";
        return 0;
    }
    for(int i=0;i<n;i++)
    {
        char x,y,op;
        cin>>op>>x>>y;
        if(x!='-') a[op-'A']++;//记录一下第一棵树每个节点有多少个孩子
        if(y!='-') a[op-'A']++;
    }
    cin>>m;
    for(int i=0;i<m;i++)
    {
        char x,y,op;
        cin>>op>>x>>y;
        if(x!='-') b[op-'A']++;//记录一下第二棵树每个节点有多少个孩子
        if(y!='-') b[op-'A']++;
    }
    for(int i=0;i<n;i++)
    {
        if(a[i]!=b[i])//判断两棵树每个孩子数量是否都相同
        {
            cout<<"No\n";
            return 0;
        }
    }
    cout<<"Yes\n";
    return 0;
}
目录
相关文章
|
7月前
|
域名解析 网络协议 安全
DNS服务器地址大全
DNS(域名系统)是互联网的“电话簿”,将域名解析为IP地址。选择优质DNS服务器可提升网络速度、降低延迟。以下是全球及中国各运营商的DNS服务器列表,包括公共DNS(如Google DNS、Cloudflare DNS)、中国电信、联通、移动等。根据地理位置、稳定性、安全性与隐私保护等因素选择适合的DNS服务器,优化上网体验。
19470 6
|
安全 Linux Shell
用户和组高级操作
本文介绍了Linux系统中用户和组管理的基本操作,包括使用`usermod`命令修改用户属性、使用`passwd`和`usermod`命令禁用和恢复用户账户、使用`userdel`命令删除用户账户、使用`groupadd`、`groupdel`和`groupmod`命令管理组群,以及使用`gpasswd`命令为组群添加用户。此外,还介绍了`su`和`sudo`命令的使用方法,帮助用户在不同身份之间切换。
199 4
|
Java
掌握Java 17的利器:Switch语句升级,模式匹配闪耀登场
掌握Java 17的利器:Switch语句升级,模式匹配闪耀登场
287 0
|
数据库
分布式事务(一)
分布式事务(一)
|
网络协议 程序员
TCP报文格式全解析:网络小白变高手的必读指南
**TCP报文格式详解摘要** 探索TCP,传输层的关键协议,提供可靠数据传输。报文含源/目的端口(标识应用),32位序号(跟踪字节顺序),确认序号(确认接收),4位首部长度,6位标志(URG, ACK, PSH, RST, SYN, FIN),窗口大小(流量控制),检验和(数据完整性),紧急指针(优先数据)及可变长选项(如MSS, 时间戳)。了解这些字段,能更好地理解TCP连接的建立、管理和数据交换。
1196 3
|
存储 编译器 C++
C++语言中类型定义
C++语言中类型定义
280 0
PPT 快捷键速查
PPT 快捷键速查
399 0
|
开发框架 .NET 编译器
C语言之枚举&联合
枚举顾名思义就是:列举 。 即把可能的取值一一列举出来
|
SQL 关系型数据库 MySQL
MySQL这样写UPDATE语句,劝退
MySQL这样写UPDATE语句,劝退
293 0
MySQL这样写UPDATE语句,劝退
|
机器学习/深度学习 存储 人工智能