PTA 树的同构 (25分)
PTA 树的同构 (25分)

输入格式:
输入给出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):
8
B 5 7
F - -
A 0 3
C 6 -
H - -
D - -
G 4 -
E 1 -
8
D 6 -
B 5 -
E - -
H - -
C 0 2
G - 3
F - -
A 1 4
输出样例2:
No
【程序思路】
首先需要根据输入找出根节点,将输入利用静态链表的方式保存,没有被指向的编号就是根节点。再调用函数递归判断树是否同构。
【程序实现】
#include<bits/stdc++.h>
using namespace std;
struct tree{
int left,right;
char data;
}a[15],b[15];
int getHhead(struct tree a[]) {
int n, head = 12, check[15] = {0};
cin>>n;
getchar();
for (int i = 0; i < n; i++) {
string s;
getline(cin,s);
a[i].data = s[0];
a[i].left = s[2] != '-' ? s[2]-'0' : 12;
a[i].right = s[4] != '-' ? s[4]-'0' : 12;
check[a[i].left] = 1;
check[a[i].right] = 1;
}
if(n)
for (head = 0; head < n;head++)
if (!check[head]) break;
return head;
}
bool jdg(int head1, int head2) {
if(head1 == 12 && head2 == 12)
return true;
else if((head1 == 12 && head2 != 12) || (head1 != 12 && head2 == 12))
return false;
else if(a[head1].data != b[head2].data)
return false;
else if(a[head1].left == 12 && b[head2].left == 12)
return jdg(a[head1].right, b[head2].right);
else if(a[head1].left != 12 && b[head2].left !=12 && a[a[head1].left].data == b[b[head2].left].data)
return (jdg(a[head1].left , b[head2].left) && jdg(a[head1].right , b[head2].right));
else
return jdg(a[head1].left , b[head2].right) && jdg(a[head1].right , b[head2].left);
}
int main(){
int head1, head2;
head1 = getHhead(a);
head2 = getHhead(b);
if (jdg(head1 , head2))
cout<<"Yes\n";
else
cout<<"No\n";
return 0;
}
PTA 树的同构 (25分)的更多相关文章
- PTA 03-树1 树的同构 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构 (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...
- PAT 03-树1 树的同构 (25分)
给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右孩子互换后 ...
- PTA 7-3 树的遍历 (25分)
PTA 7-3 树的遍历 (25分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点 ...
- PTA 7-1 还原二叉树 (25分)
PTA 7-1 还原二叉树 (25分) 给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度. 输入格式: 输入首先给出正整数N(≤50),为树中结点总数.下面两行先后给出先序和中序遍历 ...
- PTA 07-图6 旅游规划 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...
- PTA 05-树8 File Transfer (25分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/670 5-8 File Transfer (25分) We have a netwo ...
- PTA 03-树2 List Leaves (25分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/666 5-4 List Leaves (25分) Given a tree, you ...
- PTA - - 06-图1 列出连通集 (25分)
06-图1 列出连通集 (25分) 给定一个有NN个顶点和EE条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N-1N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发, ...
- PTA 旅游规划(25 分)
7-10 旅游规划(25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条 ...
随机推荐
- mumu模拟器使用
连接mumu模拟器 启动mumu模拟器 执行命令:adb connect 127.0.0.1:7555(windows系统推荐使用gitbash) 安装app Gitbash下执行:adb insta ...
- HTML 网页开发、CSS 基础语法——七.HTML常用标签
标题标签(h1-h6) 1.标题标签 ① 标题(Heading),通过<h1>-<h6>六个标签分别来对六个级别的标题进行性定义的. ② <h1>是级别最高,也是字 ...
- AT2567-[ARC074C]RGB Sequence【dp】
正题 题目链接:https://www.luogu.com.cn/problem/AT2567 题目大意 长度为\(n\)的包含三种颜色\(RGB\)的序列,\(m\)个限制\([l,r,k]\)表示 ...
- NOI.AC#2144-子串【SAM,倍增】
正题 题目链接:http://noi.ac/problem/2144 题目大意 给出一个字符串\(s\)和一个序列\(a\).将字符串\(s\)的所有本质不同子串降序排序后,求有多少个区间\([l,r ...
- 牛客挑战赛48E-速度即转发【带修莫队,分块】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11161/E 题目大意 给出\(n\)个数字的一个序列,\(m\)个操作. 给出\(l,r,k\),求一个最大 ...
- 势流理论笔记:03 Hess-Smith积分方法
书接上回势流理论笔记:02 直接法与间接法 Hess-Smith方法 采用面向对象编程的思路,\(Matlab\)程序脚本,实现以下功能: 输入面元(四边形面元顶点坐标) 输出系数矩阵\([H][M] ...
- MSSQL还原数据库,更改用户登陆权限
有的时候还原完数据库后,使用账号登陆不进去,报告没有这个用户的时候,可以使用以下sql解决: sp_change_users_login 'update_one','username','userna ...
- SpringBoot配置文件-多环境切换
profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境: 多个文件-配置多环境: 需要多个配置文件,文件名可以是 application-{prof ...
- 纯前端H5小应用_localStorage存储
开发缘由[需求发现和分析] 想要送朋友一个礼物,但是想了想,街上买的东西,em~,我们这样的猿确实不会选礼物啊,由此就想利用自己手中的工具和知识做点有用的东西吧,抱枕是礼物,钢笔是礼物,电子产品也是礼 ...
- 舌头算法的C++实现
观察生活,我们不难发现,吃饭的时候,有时候左边的东西会到右边来,这是为什么呢?就是舌头的作用了. 下面的代码将模拟舌头的运动: #include <iostream> #include & ...