[刷题] PTA 03-树1 树的同构
程序:
1 #include <stdio.h>
2 #define MaxTree 10
3 #define ElementType char
4 #define Tree int
5 #define Null -1
6
7 struct TreeNode {
8 ElementType Element;
9 Tree Left;
10 Tree Right;
11 } T1[MaxTree],T2[MaxTree];
12 int N,check[MaxTree];
13
14 Tree BuildTree(struct TreeNode T[]) {
15 int Root=Null,i; //将根结点置为空,若为空树时返回Null
16 char cl,cr;
17 scanf("%d\n",&N);
18 if(N) {
19 for(i=0; i<N; i++) check[i]=0; //将check[]置0
20 for(i=0; i<N; i++) {
21 scanf("%c %c %c\n",&T[i].Element,&cl,&cr);
22 if(cl!='-') {
23 T[i].Left=cl-'0';
24 check[T[i].Left]=1;
25 } else T[i].Left=Null;
26 if(cr!='-') {
27 T[i].Right=cr-'0';
28 check[T[i].Right]=1;
29 } else T[i].Right=Null;
30 }
31 for(i=0; i<N; i++)
32 if(!check[i]) break;
33 Root=i;
34 }
35 return Root;
36 }
37
38 int Isomorphic(Tree R1,Tree R2) {
39 //都为空树则同构
40 if((R1==Null)&&(R2==Null))
41 return 1;
42 //只有一个根结点为空则不同构
43 if(((R1==Null)&&(R2!=Null))||((R1!=Null)&&(R2==Null)))
44 return 0;
45 //根结点数据不同则不同构
46 if(T1[R1].Element!=T2[R2].Element)
47 return 0;
48 //左儿子都为空,判断右儿子是否同构
49 if((T1[R1].Left==Null)&&(T2[R2].Left==Null))
50 return Isomorphic(T1[R1].Right,T2[R2].Right);
51 //左儿子结点都不为空且数据相等,对左儿子的左右子树进行递归
52 if(((T1[R1].Left!=Null)&&(T2[R2].Left!=Null))&&
53 ((T1[T1[R1].Left].Element)==(T2[T2[R2].Left].Element)))
54 return(Isomorphic(T1[R1].Left,T2[R2].Left)&&
55 Isomorphic(T1[R1].Right,T2[R2].Right));
56 //左儿子不一样,左右交换后递归
57 else
58 return(Isomorphic(T1[R1].Left,T2[R2].Right)&&
59 Isomorphic(T1[R1].Right,T2[R2].Left));
60 }
61
62 int main() {
63 Tree R1,R2;
64 R1=BuildTree(T1);
65 R2=BuildTree(T2);
66 if(Isomorphic(R1,R2))
67 printf("Yes\n");
68 else printf("No\n");
69 return 0;
70 }
分析:
1、用数组存储树,结点无序
2、需找出树的根结点
3、判断是否同构要考虑周全
[刷题] PTA 03-树1 树的同构的更多相关文章
- 【刷题】BZOJ 4817 [Sdoi2017]树点涂色
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...
- 【刷题】BZOJ 1211 [HNOI2004]树的计数
Description 一个有n个结点的树,设它的结点分别为v1, v2, -, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, -, dn,编程需要 ...
- 【刷题】BZOJ 1036 [ZJOI2008]树的统计Count
Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. ...
- 刷题向》关于线段树的区间开根号 BZOJ3211(NORMAL+)
这是一道关于线段树的区间开根号的裸题,没什么好讲的. 值得注意的是,因为有区间开根号的性质,所以我们每一次更改操作只能把更改区间所覆盖的所有元素全部查找,当然你直接找效率明显爆炸... 能够注意到,指 ...
- 【刷题】COGS 2701 动态树
★★★☆ 输入文件:dynamic_tree.in 输出文件:dynamic_tree.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 开始时有n个点形成的森林,共m个操作. ...
- 刷题总结——谈笑风生(主席树+dfs序的应用)
题目: Description 设T 为一棵有根树,我们做如下的定义:• 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道高明到哪里去了”.• 设a 和 b 为 T 中的两个不同 ...
- C#LeetCode刷题之#100-相同的树(Same Tree)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4066 访问. 给定两个二叉树,编写一个函数来检验它们是否相同. ...
- c++刷题(21/100)树的打印、矩阵覆盖和括号生成
题目一:把二叉树打印成多行 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 思路:一开始以为2维的vector可以直接访问,但是试了是不行,会报错,vector在有值之前不能直接访问 ...
- c++刷题(18/100)树
题目1:二叉搜索树的第k个节点 给定一颗二叉搜索树,请找出其中的第k小的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 思路:因为是二叉搜索树 ...
随机推荐
- Starting Tomcat v9.0 Server at localhost' has encountered a problem
•问题描述 在通过 Eclipse 打开 Tomcat 时报错: •解决方案 找到 Tomcat 的安装位置,打开 tomcat\bin 目录,找到 shutdown.bat,手动关闭 tomcat: ...
- webpack核心模块tapable源码解析
上一篇文章我写了tapable的基本用法,我们知道他是一个增强版版的发布订阅模式,本文想来学习下他的源码.tapable的源码我读了一下,发现他的抽象程度比较高,直接扎进去反而会让人云里雾里的,所以本 ...
- js 一数组分割成若干个数组,并装换成字符串赋个li标签
success: function (datas) { //请求成功后处理函数. var htmltext = ''; var data = datas.result; console.log(dat ...
- 四单元总结&OO总结
目录 本单元架构总结 第一次作业 第二次作业 第三次作业 架构设计总结 第一单元 第二单元 第三单元 对测试演进 课程收获 改进建议 线上学习体验 本单元架构总结 第一次作业 第一次作业按照UML正常 ...
- Linux 磁盘管理(df fu fdisk mkfs mount)
Linux 磁盘管理 Linux磁盘管理好坏直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df : 列出文件系统的整体磁盘使用量 du : 检查磁盘空间使用 ...
- Leedcode算法专题训练(链表)
1.发现两个链表的交点 160.两个链表的交集(容易) Leetcode /力扣 public class Solution { public ListNode getIntersectionNode ...
- .NET管道应用——工作池
名词解释 工作池:一组等待任务分配的线程.一旦完成了所分配的任务,这些线程可继续等待任务的分配. .NET管道:命名空间System.Threading.Channels中的Channel和Chann ...
- Salesforce学习之路(一)几个简单概念
Salesforce是一款非常强大的CRM(Customer Relationship Management)系统,国外企业使用十分频繁,而国内目前仅有几家在使用(当然,国内外企使用的依旧较多),因此 ...
- JAVAEE_Servlet_15_HttpServletRequest中常用方法(二)
HttpServletRequest中常用方法 ## HttpServletRequest中的第二类方法 获取各种路径 和 IP地址 * 获取路径和地址 - 获取ServletContext上下文对象 ...
- 数据结构之LinkedList | 让我们一块来学习数据结构
highlight: monokai theme: vue-pro 上一篇文章中使用列表(List)对数据排序,当时底层储存数据的数据结构是数组.本文将讨论另外一种列表:链表.我们会解释为什么有时链表 ...