#include<stdio.h>
#define MaxTree 100
#define ElementType char
#define Tree int//定义一个树的结构体,这里采用一个静态链表存储
struct TreeNode{ElementType data;Tree LeftTree;Tree RightTree;
}T1[MaxTree],T2[MaxTree];//建立树的函数
int buildTree(struct TreeNode T[]){//输入结点的个数int N; scanf("%d",&N);if(N<=0){return -1;}//定义一个测试数组来判断结点是否有双亲,初始值赋值为0 int test[N];for(int i=0;i<N;i++){test[i]=0;}for(int i=0;i<N;i++){char ch1;char ch2;scanf("%c %c %c",&T[i].data,&ch1,&ch2);if(ch1!='-'){  //如果左孩子不为空就成为对应结点的左孩子 T[i].LeftTree=ch1-'0';test[ T[i].LeftTree]=1;  //左孩子标号的那个结点就是有双亲的了 }else T[i].LeftTree=-1;  //左孩子为空则标记为-1 if(ch2!='-'){T[i].RightTree=ch2-'0';test[ T[i].RightTree]=1; }else T[i].RightTree=-1;} for(int j=0;j<N;j++){  //从0开始逐一判断每个结点是否有双亲 if(!test[j])  //没有双亲的就是根结点 return j;}
}//判断树是否同构并输出
int  isSame(int root1,int root2){//只要有树空则不同构 if(root1==-1||root2==-1){return 0;}    //非空但结点数据不相等则不同构 if(T1[root1].data!=T2[root2].data)return 0;//继续递归比较左子树和左子树 ,右子树和右子树 if(isSame(T1[root1].LeftTree,T2[root2].LeftTree)&&isSame(T1[root1].RightTree,T2[root2].RightTree)){return 1;}//递归比较a的左与b的右子树 if(isSame(T1[root1].RightTree,T2[root2].LeftTree)&&isSame(T1[root1].LeftTree,T2[root2].RightTree)){return 1;}return 0;//都不同构返回0;
} //主函数
int main(){Tree r1,r2;r1=buildTree(T1);r2=buildTree(T2);if(isSame(r1,r2)){printf("Yes");}else{printf("No");}return 0;
}

递归法进行二叉树同构判定相关推荐

  1. 递归法求二叉树的深度

    想要计算一个二叉树的深度,我们先可以拆成求根结点的左右子树的深度:而根结点的左右子树的深度又可拆成求根左结点的左右子树深度和根右结点的左右子树的深度.这样一层一层给套下去,很容易想到递归. 明确每一步 ...

  2. Java~二叉树的前中后序遍历的几种方式(递归法,迭代法,标记法等)

    目录 一.结点的定义 二.递归法遍历二叉树 前序遍历 中序遍历 后序遍历 三.迭代(非递归)遍历二叉树 (1).迭代模拟法 前序遍历 中序遍历 后序遍历 (2).空指针标记法 前序遍历 中序遍历 后序 ...

  3. 《剑指offer》非递归法判定二叉树是否是对称的

    题目:请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 解析:该非递归法有点傻傻的,思想是利用队列进行层次遍历.然后翻转该二叉树,再层次遍 ...

  4. 二叉树-对称二叉树(递归法)

    题意: 给定一个二叉树,检查它是否是镜像对称的. 中间划开,看是否对称 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / 2 2 / \ / 3 4 4 3 思路:(递归法) 这里镜像 ...

  5. 《剑指offer》求二叉树的最小深度(非递归法)

    题目:求二叉树的最小深度(实际上该题来自leetcode) 解析:递归法简单些,下面演示下非递归.无外乎层次遍历二叉树了,思想是用current记录当前层的节点数,next记录下一层的节点数,用队列保 ...

  6. 二叉树前序遍历(递归法和迭代法(即非递归法))——C++

    声明:本文原题主要来自力扣力扣,记录此博客主要是为自己学习总结,不做任何商业等活动 本文主要讲解二叉树的前序遍历递归法和迭代法.中序遍历和后序遍历可以参考博主下面两篇博客:二叉树中序遍历(递归法和迭代 ...

  7. 二叉树中序遍历(递归法和迭代法(非递归法))——C++

    声明:本文原题主要来自力扣,记录此博客主要是为自己学习总结,不做任何商业等活动! 二叉树的遍历有前序遍历.中序遍历.后序遍历和层次遍历,其中二叉树基本知识点可以参考博主上篇博客(二叉树基本知识点图文介 ...

  8. 二叉树的最小深度——递归法、迭代法

    1题目 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20,null,nu ...

  9. 树的宽度 递归法和非递归法

    递归法思路: 建立一个数组,count[1]表第1层节点总数,即宽度,count[2]表第二层节点总数,依次类推 用先序遍历二叉树,每深入一层就把该层的节点个数加1,最大节点数即树的宽度 代码如下: ...

最新文章

  1. ansible playbook lookups组件
  2. java day10(续day9)
  3. 【ABAP】OO ALV 概述
  4. python相关软件安装
  5. 全局和本地事务(从理论上)
  6. 基于AccessToken方式实现API设计
  7. java 所有子类_java 查找类的所有子类
  8. python向服务器请求压缩数据及解压缩数据
  9. python要背的单词_Python-默背单词
  10. Git 修改已提交 commit 的信息
  11. Linux上通过SUU更新Dell服务器固件
  12. 如何使用 chrome devtool 分析前端代码执行耗时和内存占用
  13. 360和腾讯QQ的那场战争!
  14. 苹果ppt_苹果发布会PPT,为何总能惊艳到你
  15. 【微信小程序】三分钟学会小程序的列表渲染
  16. 【图文详解:索引极简教程】SQL 查询性能优化原理
  17. MATLAB调用CPP代码
  18. 【Kind2(基于SMT的自动模型检查器)学习笔记】基本语法
  19. LAMP架构(基础篇)
  20. 多个渠道成功销售的秘诀速递

热门文章

  1. 关于影子系统安装完之后无限进入完全影子模式的解决办法
  2. android js接口调用方法,详解Android JS相互调用
  3. 轻松实现SR论文中的局部放大
  4. 【AAAI-2019】STCKA-Deep Short Text Classification with Knowledge Powered Attention(基于知识驱动注意力的深度短文本分类)
  5. 【HCIA-Datacom V1.0培训教材】网络管理与运维
  6. VoLTE题库(含解析)-中高级必看
  7. 大厚度耐磨钢NM450和NM500钢板技术条件
  8. 高效的苹果清理软件——cleanmymac
  9. 元学习(meta learning)和小样本学习(few-shot learning)
  10. sql 复合主键 联合主键_学习SQL:主键