立志用最少的代码做最高效的表达


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

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

输入格式:
输入给出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<iostream>
#include<cstdio>
#include<cstdlib>
#define maxTree 10
#define Tree int
#define Null -1using namespace std;struct TreeNode {char element;Tree left, right;
}T1[maxTree], T2[maxTree];
int check[11] = {0};Tree BuildTree(struct TreeNode T[]) {int n, i, root = Null;   //root的初始值为-1char cl, cr;       cin >> n;     //节点数量 if(n) {for(i = 0; i < n; i++) check[i] = 0;for(i = 0; i < n; i++) {cin >> T[i].element >> cl >> cr;if(cl != '-') {T[i].left = cl-'0';check[T[i].left] = 1;         //证明该节点被指向 }else T[i].left = Null;         //否则的话,左节点值为-1if(cr != '-') {T[i].right = cr-'0';check[T[i].right] = 1;} else T[i].right = Null;}for(i = 0; i < n; i++)    //从头遍历,如果有没被指向的节点,则一定为根节点 if(!check[i]) break;root = i;      //根节点赋值 } return root;
}int iso(Tree R1, Tree R2) {//判断是否同构:结构是否相等(左右子树是否都可以遍历 + 元素相等) //1、如果是正常结束,则返回1 if((R1 == Null) && (R2 == Null))   return 1;//2、如果有一方提前结束,则返回0 if((R1==Null) && (R2!=Null) || (R1!=Null)&&(R2==Null))return 0;//3、如果元素不相等,返回0 if(T1[R1].element != T2[R2].element)return 0;//4、如果左子树空了,则只遍历右子树 if(T1[R1].left == Null && T2[R2].left == Null)return iso(T1[R1].right, T2[R2].right);//如果左子树没空,并且双方左子树的元素值相等//则按正常情况分别遍历左子树和右子树 if((T1[R1].left!=Null && T2[R2].left!=Null) && T1[T1[R1].left].element==T2[T2[R2].left].element)return (iso(T1[R1].left, T2[R2].left) && iso(T1[R1].right, T2[R2].right));else  return (iso(T1[R1].left, T2[R2].right) && iso(T1[R1].right, T2[R2].left));
}int main() {/*建二叉树1建二叉树2判断是否同构并输出 */Tree R1, R2;R1 = BuildTree(T1);       //参数为结构体数组 R2 = BuildTree(T2);if(iso(R1, R2)) printf("Yes\n");else printf("No\n");return 0;
}

【视频讲解】基础实验4-2.1 树的同构 (25 分)相关推荐

  1. PTA 03-树1 树的同构 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构   (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...

  2. 7-3 树的同构 (25 分)(思路加详解)来呀baby!!!!!!!!

    一:题目 7-3 树的同构 (25 分) 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把 ...

  3. 树的同构 (25分)

    树的同构 (25分) 思路分析:树的同构,顾名思义两个树是否有一样的结构,每一个孩子结点的孩子的数量和值都要相同,但是它所在的位置可以左右交换(不是说两个父亲结点的孩子互相交换,而是说父亲结点的下一层 ...

  4. 03-树1 树的同构 (25分)

    给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右孩子互换后 ...

  5. 【解析】基础实验4-2.5 关于堆的判断 (25 分)

    立志用最少的代码做最高效的表达 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are ...

  6. 基础实验 6-2.5 城市间紧急救援(25 分)

    作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...

  7. 【CCCC】L2-006 树的遍历 (25分),根据后序与中序遍历建立二叉树(我讨厌树,系列1)

    problem L2-006 树的遍历 (25分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30), ...

  8. 【详细解析】基础实验4-2.6 目录树 (30 分)

    立志用最少的代码做最高效的表达 在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称.当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构.请编写程序实现目录 ...

  9. 7-1 树的同构 (20分) 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右

    #include <bits/stdc++.h> using namespace std; struct tree{char data;int left,right; }; struct ...

最新文章

  1. JS 实现MVC的写法
  2. 构建flutter项目
  3. python导入txt文件并绘图-Python实现读取txt文件并画三维图简单代码示例
  4. 关于选择哪些村庄试点新农村建设的讨论
  5. Access Your Office on Your Phone
  6. 网页加载的不同的方式、点击按钮显示一句话、jQuery中获取元素的方法
  7. log4j简介及应用
  8. 子函数的指针释放问题
  9. Google Earth 和MS Virtual Earth:虚拟地球简介
  10. 售价扎心!索尼Xperia 5国行版开启预售:骁龙855+1200万后置三摄
  11. matlab 拼接矩阵,Matlab 不同行数矩阵拼接
  12. 【重识 HTML + CSS】元素类型、display、visibility、overflow
  13. linux下用到的软件
  14. 对比AppScan Source和Fortify扫描AltoroJ的结果
  15. 【设计模式】享元模式(Flyweight)
  16. android 支持swf格式,安卓手机如何播放swf文件
  17. Hans Petter Langtangen
  18. php for android
  19. KDE-Graphics(KDE图形图像软件)先容
  20. Java代码实现ping命令

热门文章

  1. kubernetes(八)问题排查
  2. 微服务架构统一安全认证设计与实践
  3. 《微服务架构设计模式》总结,文末送书
  4. 二叉树构建及双向链表
  5. 李郁韬:短期爆发还是未来趋势?腾讯云海量音视频通信服务背后的技术发展
  6. CDN关键技术研究与应用—内容路由技术
  7. 基于Kubeflow建立的星辰算力训练平台背后的技术架构
  8. 亿级流量场景下的平滑扩容:TDSQL的水平扩容方案实践
  9. Linux中使用SecureCRT上传、下载文件命令sz与rz用法实例
  10. ubuntu 16.04 安装TensorFlow GPU版本