Isomorphic:二叉树同构
如果T1可以通过交换T1中(一些)节点的左右子节点来转换为T2,则T1和T2这两棵树是同构的。例如,图1中的两棵树是同构的,因为如果交换了A、B和G的子节点,而不是其他节点,则它们是相同的。给出一个多项式时间算法来判断两棵树是否同构。
如果T1和T2确实是同构的,函数应该返回1,如果不是,则返回0。
Sample program of judge:
#include <stdio.h>
#include <stdlib.h>typedef char ElementType;typedef struct TreeNode *Tree;
struct TreeNode {ElementType Element;Tree Left;Tree Right;
};Tree BuildTree(); /* details omitted */int Isomorphic( Tree T1, Tree T2 );int main()
{Tree T1, T2;T1 = BuildTree();T2 = BuildTree();printf(“%d\n”, Isomorphic(T1, T2));return 0;
}/* Your function will be put here */
int Isomorphic( Tree T1, Tree T2 )
{if(!T1&&!T2)//如果两棵树都是空树,两棵树同构return 1;if(!T1&&T2) //一棵树为空一棵树不为空,不同构return 0;if(T1&&!T2)return 0;if(T1->Element!=T2->Element) //两棵树的数据不同,不同构return 0;if(!T1->Left&&!T2->Left)//两棵树的左子树都为空,判断右子树是不是同构return Isomorphic(T1->Right,T2->Right);//两棵树都有左子树,并且数据都相等,判断两个书是否同构if((T1->Left&&T2->Left)&&(T1->Left->Element==T2->Left->Elemrnt))return Isomorphic(T1->Left,T2->Left)&&Isomorphic(T1->Right,T2->Right);else//如果两棵树左子树(一个空一个不空或者都不空)并且数据不一样,那么判断第一棵树的左(右)儿子是否跟第二棵树的右(左)儿子同构return Isomorphic(T1->Left,T2->Right)&&Isomorphic(T1->Right,T2->Left);}
Isomorphic:二叉树同构相关推荐
- 递归法进行二叉树同构判定
#include<stdio.h> #define MaxTree 100 #define ElementType char #define Tree int//定义一个树的结构体,这里采 ...
- 判断两棵二叉树是否同构,三种实现方式(递归、队列、堆栈)
一.同构的概念: 给定两棵二叉树 T1 和 T2,如果T2可以通过若干次左右孩子互换就变成T1,那么我们称这两棵树是同构的 例1:下图两棵树同构,因为对T2,交换A左右孩子:交换B左右孩子,交换G左右 ...
- 树的同构(c语言静态链表实现)
题目 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右孩子 ...
- 2.3 树的同构(树,c)
树的同构 树的同构 输入格式: 输出格式: 输入样例1(对应图1): 输出样例1: 输入样例2(对应图2): 输出样例2: 题意理解 输入两棵二叉树的信息,判断是否同构(对应图1) 求解思路 二叉树表 ...
- 03-树1 树的同构
题目 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右孩子 ...
- 数据结构(三)—— 树(4):树的同构
数据结构系列内容的学习目录→\rightarrow→浙大版数据结构学习系列内容汇总. 题意理解: 给定两棵树T1和T2.如果T1可以通过若干次左右子结点互换就变成T2,则我们称两棵树是" ...
- 树根c语言,03-树1 树的同构 (C语言链表实现)
#include #include #include #include typedef char ElemType; typedef struct BinTree { ElemType data; s ...
- 数据结构和算法面试题系列—二叉树面试题汇总
这个系列是我多年前找工作时对数据结构和算法总结,其中有基础部分,也有各大公司的经典的面试题,最早发布在CSDN.现整理为一个系列给需要的朋友参考,如有错误,欢迎指正.本系列完整代码地址在 这里. 0 ...
- 六大类二叉树面试题汇总解答
0 概述 继上一篇总结了二叉树的基础操作后,这一篇文章汇总下常见的二叉树相关面试题,主要分为判断类.构建类.存储类.查找类.距离类.混合类这六类大问题. 本文所有代码 https://github.c ...
最新文章
- FPGA In/Out Delay Timing Constaint
- MyBatis知多少(12)私有数据库
- hardnet68尝试
- ftp连接报错:Windows无法访问此文件夹
- 合作分享还是独占独食?阿里健康、京东健康走出了两条不同的路
- 中医科学院临基所携手第四范式助力抗疫工作
- TreeList右键菜单功能
- SAP Spartacus i18n 的文本,和翻译相关的话题:internationalization
- react hooks使用_如何开始使用React Hooks:受控表格
- 多维度创新打造领先阿里云技术生态
- 苹果x屏幕出现一条绿线_部分用户反映苹果 iPhone 12 屏幕出现划痕 - iPhone 12
- 深度神经网络反向传播算法
- 小马哥讲Spring核心编程思想 - 第二章 重新认识IoC
- CMMI基础知识扫盲 笔记
- 字符串String实战之商品对象缓存管理之新增与获取详情
- 创作焦虑之下,红人大V怎么看微博?
- unix服务器日志文件,UNIX 系统日志
- MarkDown图片缩放
- poj--1625Censored!+AC自动机上的dp+大数
- 分析复联系列电影台词,看看每个英雄说得最多的词是什么