PTA数据结构与算法题目集(中文)  7-3 树的同构

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

图1

图2

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

输入格式:

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

输出格式:

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

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

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

输出样例1:

  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:

  1. No
  2.  
  3. 题目分析:首先可以通过树最大大小 10来建树---利用结构体数组存储树 对于判断2个树是否同构 可以递归的进行判断 对根节点判断完成后 分成两种情况继续判断----一种是 两颗树的左右节点正好匹配 一种是两棵树的左右节点匹配相反 这样判断下去 直到遇到不存在的结点为止
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<malloc.h>
  5. typedef int LChild;
  6. typedef int RChild;
  7.  
  8. typedef struct TNode
  9. {
  10. char Data;
  11. LChild Lc;
  12. RChild Rc;
  13. }Tree[];
  14.  
  15. Tree A;
  16. Tree B;
  17.  
  18. int Collected[];
  19. void InitiliazeCollected()
  20. {
  21. for (int i = ; i < ; i++)
  22. Collected[i] = ;
  23. }
  24. int BuildTree(Tree A)
  25. {
  26. InitiliazeCollected();
  27. int N;
  28. char c,n1, n2;
  29. scanf("%d\n", &N);
  30. if (N == )
  31. return -;
  32. for (int i = ; i < N; i++)
  33. {
  34. scanf("%c %c %c\n", &c, &n1, &n2);
  35. A[i].Data = c;
  36. if (n1 != '-')
  37. {
  38. A[i].Lc = n1 - '';
  39. Collected[n1 - ''] = ;
  40. }
  41. else
  42. A[i].Lc = -;
  43. if (n2 != '-')
  44. {
  45. A[i].Rc = n2 - '';
  46. Collected[n2 - ''] = ;
  47. }
  48. else
  49. A[i].Rc = -;
  50. }
  51. for (int i = ; i < N; i++)
  52. if (!Collected[i])
  53. return i;
  54. }
  55. int Charge(int TreeA, int TreeB)
  56. {
  57.  
  58. if (TreeA== -&&TreeB==-)
  59. return ;
  60. if (A[TreeA].Data == B[TreeB].Data)
  61. {
  62. if ((Charge(A[TreeA].Lc, B[TreeB].Lc) && Charge(A[TreeA].Rc,B[TreeB].Rc))||((Charge(A[TreeA].Lc,B[TreeB].Rc)&&Charge(A[TreeA].Rc,B[TreeB].Lc))))
  63. return ;
  64. }
  65. else
  66. return ;
  67. }
  68. int main()
  69. {
  70. int TreeA=BuildTree(A);
  71. int TreeB=BuildTree(B);
  72. if (TreeA == - && TreeB == -)
  73. printf("Yes");
  74. else if (TreeA == -&&TreeB!=-|| TreeB == -&&TreeA!=-)
  75. printf("No");
  76. else if (Charge(TreeA, TreeB))
  77. printf("Yes");
  78. else
  79. printf("No");
  80. return ;
  81. }
  1.  

PTA数据结构与算法题目集(中文) 7-3的更多相关文章

  1. PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)

    PTA数据结构与算法题目集(中文)  7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分)   给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义 ...

  2. PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分)

    PTA数据结构与算法题目集(中文)  7-42整型关键字的散列映射 (25 分) 7-42 整型关键字的散列映射 (25 分)   给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射 ...

  3. PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分)

    PTA数据结构与算法题目集(中文)  7-41PAT排名汇总 (25 分) 7-41 PAT排名汇总 (25 分)   计算机程序设计能力考试(Programming Ability Test,简称P ...

  4. PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分)

    PTA数据结构与算法题目集(中文)  7-40奥运排行榜 (25 分) 7-40 奥运排行榜 (25 分)   每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如 ...

  5. PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)

    PTA数据结构与算法题目集(中文)  7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分)   在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...

  6. PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分)

    PTA数据结构与算法题目集(中文)  7-38寻找大富翁 (25 分) 7-38 寻找大富翁 (25 分)   胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假 ...

  7. PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)

    PTA数据结构与算法题目集(中文)  7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分)   Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...

  8. PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

    PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分)   在社交网络中,个人或单位(结点)之间通过某 ...

  9. PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)

    PTA数据结构与算法题目集(中文)  7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...

  10. PTA数据结构与算法题目集(中文) 7-34

    PTA数据结构与算法题目集(中文)  7-34 7-34 任务调度的合理性 (25 分)   假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行.“ ...

随机推荐

  1. python社区要放弃了pip?版本信息里带警告很不寻常哦

    pip是python的一个包管理器. 今天再查询Pip3 -V 时,除了正常的版本信息外,多了几行信息 WARNING: pip is being invoked by an old script w ...

  2. 【Oracle】RAC的多实例数据迁移至单机的多实例。

    思路:一般的思路可以通过RMAN进行数据的恢复.由于数据库可以停机,因此,这次试用数据泵(expdp,impdp)进行数据 的导入导出. 1.源数据库导出 通过编写导出shell脚本导出数据,如下: ...

  3. 深入学习用 Go 编写 HTTP 服务器

    Go是一门通用的编程语言,想要学习 Go 语言的 Web 开发,就必须知道如何用 Go 启动一个 HTTP 服务器用于接收和响应来自客户端的 HTTP 请求.用 Go实现一个http server非常 ...

  4. JAVAEE学习day05学习,数组

    容器及元素的概念 容器:是将多个数据存储到一起 元素:每个数据称为该容器的元素 数组的概念 数组:数组是长度固定,存储数据的容器,保证多个数据的类型要一致 数组定义格式及其描述 动态定义: 数据类型 ...

  5. css中:overflow:hidden清除浮动的原理

    要想彻底清除浮动的影响,适合的属性不是 clear 而是 overflow. 一般使用 overflow:hidden,利用 BFC 的“结界”特性彻底解决浮动对外部或兄弟元素的影响. 1. 前言: ...

  6. Spring Cloud - Nacos注册中心入门单机模式及集群模式

    近几年微服务很火,Spring Cloud提供了为服务领域的一整套解决方案.其中Spring Cloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案. 包 ...

  7. CSS每日学习笔记(2)

    7.31.2019 1.CSS定位:允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的位置. CSS 有三种基本的定位机制:普通流.浮动和绝对定位.除非专 ...

  8. Maven+JSP+Servlet+JDBC+Mysql实现的dbExper宾馆管理系统

    本文存在视频版本,请知悉 项目简介 项目来源于:https://github.com/mafulong/databaseExper-hotelMaster 这次分享的也是毕设或课程设计选择一样很多的宾 ...

  9. jq 导航跟随 模拟京东手机端

    想做一个导航跟随,但是代码都要下载,自己简单些了一个,css都放html里面了,所以也不用下载直接新建html,然后粘贴,点开就是导航跟随效果 效果如图 <!DOCTYPE html> & ...

  10. 采用vue编写的功能强大的swagger-ui页面

    think-swagger-ui-vuele swagger-ui有非常多的版本,觉得不太好用,用postman,每个接口都要自己进行录入.所以在基于think-vuele进行了swagger格式js ...