程序:

 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 树的同构的更多相关文章

  1. 【刷题】BZOJ 4817 [Sdoi2017]树点涂色

    Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...

  2. 【刷题】BZOJ 1211 [HNOI2004]树的计数

    Description 一个有n个结点的树,设它的结点分别为v1, v2, -, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, -, dn,编程需要 ...

  3. 【刷题】BZOJ 1036 [ZJOI2008]树的统计Count

    Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. ...

  4. 刷题向》关于线段树的区间开根号 BZOJ3211(NORMAL+)

    这是一道关于线段树的区间开根号的裸题,没什么好讲的. 值得注意的是,因为有区间开根号的性质,所以我们每一次更改操作只能把更改区间所覆盖的所有元素全部查找,当然你直接找效率明显爆炸... 能够注意到,指 ...

  5. 【刷题】COGS 2701 动态树

    ★★★☆ 输入文件:dynamic_tree.in 输出文件:dynamic_tree.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 开始时有n个点形成的森林,共m个操作. ...

  6. 刷题总结——谈笑风生(主席树+dfs序的应用)

    题目: Description 设T 为一棵有根树,我们做如下的定义:• 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道高明到哪里去了”.• 设a 和 b 为 T 中的两个不同 ...

  7. C#LeetCode刷题之#100-相同的树(Same Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4066 访问. 给定两个二叉树,编写一个函数来检验它们是否相同. ...

  8. c++刷题(21/100)树的打印、矩阵覆盖和括号生成

    题目一:把二叉树打印成多行 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 思路:一开始以为2维的vector可以直接访问,但是试了是不行,会报错,vector在有值之前不能直接访问 ...

  9. c++刷题(18/100)树

    题目1:二叉搜索树的第k个节点 给定一颗二叉搜索树,请找出其中的第k小的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 思路:因为是二叉搜索树 ...

随机推荐

  1. javascript常用方法封装

    1,获取链接上的参数 getQueryString = (name, search) => { search = search || window.location.search.substr( ...

  2. Istio 网络弹性 实践 之 故障注入 和 调用重试

    网络弹性介绍 网络弹性也称为运维弹性,是指网络在遇到灾难事件时快速恢复和继续运行的能力.灾难事件的范畴很广泛,比如长时间停电.网络设备故障.恶意入侵等. 重试(attempts) Istio 重试机制 ...

  3. 「HTML+CSS」--自定义加载动画【011】

    前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...

  4. 幻灯片放映模式切换windows terminal背景图片

    目录 幻灯片放映模式切换windows terminal背景图片 脚本功能 开发需求 使用技术 操作说明 使用示例 查看帮助 输入参数使用 脚本详情 引用参考 幻灯片放映模式切换windows ter ...

  5. 201871030116-李小龙 实验一 软件工程准备——Blog

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...

  6. OO结课了,狂喜

    OO结课了,狂喜 哈哈哈哈哈 哈哈哈 哈哈 哈 第十三次作业 UML类图 简要分析: 本次作业是对UML类图进行解析,给到的接口里面已经有了很多类了,但是自带的类肯定是没有反应这些类的结构的.所以就自 ...

  7. 『Spring Boot 2.4新特性』减少95%内存占用

    节省 95%的内存占用,减少 80%的启动耗时. GraalVM 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务.最近比较火的 Java 框架 Quarkus 默认支持 G ...

  8. Maven导入依赖慢解决办法

    新安装的Maven,下载jar包速度会很慢,因为官方的库在国外, 连上并下载速度很慢. 因为maven是支持镜像的,我们就可以本地maven目录下的的conf目录下的setting.xml文件中找到标 ...

  9. Go-15-flag.String 获取系统参数

    场景: 启动应用程序时,需要传入系统参数.例如:./start --b /notebook --p true --n 8 package main import ( "fmt" f ...

  10. Day01_11_Java方法

    Java - 方法 什么是java中的方法? - 方法就是一段代码片段,并且这段代码可以完成某个特定的功能.动作.是可以被重复的使用. - 方法就是类的一个动作. - 方法在C语言中也叫做函数 或 f ...