[刷题] 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. 思路:因为是二叉搜索树 ...
随机推荐
- Shell prompt(PS1) 与 Carriage Return(CR) 的关系?-- Shell十三问<第二问>
Shell prompt(PS1) 与 Carriage Return(CR) 的关系?-- Shell十三问<第二问> 当你成功登录进一个文字界面之后,大部份情形下,你会在荧幕上看到一个 ...
- HTML5和CSS3提高
一.HTML5的新特性 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签.新的表单和新的表单属性等. 这些新特性都有兼容性问题,基本是 IE9+ 以上版本的浏览器才支持,如果不考虑兼容 ...
- vue-cli2 生成的项目打包优化(持续学习中)
1.昨天看到自己的项目每次打包后都是30M左右,就觉得这个打包后的dist文件太大了,能不能小点呢, 然后就看网上的资料,提供了好多优化的办法,但是我只用了一个,后期再不断的优化吧. 打开工程项目文件 ...
- 02-MySQL主要配置文件
一.二进制日志log-bin 作用:主从复制 二.错误日志 log-err 默认关闭,记录严重的警告和错误信息,每次启动和关闭的详细信息 三.慢查询日志log 默认关闭,记录查询的sql语句,如果开启 ...
- 【pytest系列】- assert断言的使用
unittest断言方式是用过框架自己实现的,即self.assertEqual()等,当我们使用pytest框架后,这种断言方式是不可用的,因为测试类不会再继承unittest.TestCase类, ...
- Java异常详解——一篇文章搞定Java异常
目录 1. 异常的体系结构 2. 常见的异常 2.1 运行时异常 2.2 编译时异常 (编译时异常必须进行处理否则无法运行) 3. 异常的抓抛模型原理 4. 异常的处理 4.1 try - catch ...
- Linux(CentOS7)安装与卸载MySQL8.0图文详解
Mysql数据库的安装对于开发者来说,是我们必然会面对的问题,它的安装过程其实并不复杂,并且网络上的安装教程也非常多,但是对于新手来说,各种不同形式的安装教程,又给新手们带来了要选择哪种方式进行安装的 ...
- surging 如何使用流媒体服务
前言 随着直播行业大火,各种直播类产品和产品层出不穷,能够满足各方人员的需求和互动,也使得斗鱼.虎牙.抖音都随着直播业的大火而欣欣向荣, 大家也对直播平台了解不少,也参与使用,但是怎么样才能研发出视频 ...
- 1089 Insert or Merge
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- 微软加入字节码联盟,进一步开发支持Blazor 的WebAssembly技术
字节码联盟 (Bytecode Alliance)宣布已正式成为 501(c)(3) 非营利组织,参与组建的企业/组织包括 Fastly.英特尔.Mozilla 和微软,此外还邀请到了 Arm.DFI ...