#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdbool.h>

 typedef char ElemType;

 typedef struct BinTree
 {
     ElemType data;
     struct BinTree *left;
     struct BinTree *right;
 }BinTree;

 bool TreeCmp(BinTree * a, BinTree * b); //判断a树与b树是否同构
 BinTree * BinTree_new(int n);

 int main()
 {
     int n;
     scanf("%d", &n);
     BinTree * a = BinTree_new(n);
     scanf("%d", &n);
     BinTree * b = BinTree_new(n);

     bool flag = TreeCmp(a, b);
     if (flag)
         printf("Yes");
     else
         printf("No");

     ;
 }

 BinTree * BinTree_new(int n)
 {
     )
     {
         return  NULL;
     }
     else
     {
         int i, li, ri;
         ElemType c, lc, rc;
         BinTree * T = (BinTree *)malloc(n * sizeof(BinTree));
         bool *head = (bool *)malloc(n * sizeof(bool));

         memset(head, true ,sizeof(head));

         ; i < n ; ++i )
         {
             scanf(" %c %c %c", &c, &lc, &rc);

             li = lc-';
             ri = rc-';

             T[i].data = c;

             if (lc != '-')
             {
                 T[i].left = &T[li];
                 head[li] = false;
             }
             else
                 T[i].left = NULL;

             if (rc != '-')
             {
                 T[i].right = &T[ri];
                 head[ri] = false;
             }
             else
                 T[i].right = NULL;

         }

         //寻找树的树根(树根没有其它的结点指向它)
         ; i < n ; ++i )
             if (head[i] == true)
                 break;
         free(head);
         return &T[i];
     }
 }

 bool TreeCmp(BinTree * a, BinTree * b)
 {
     if (a == NULL && b == NULL)//两棵树都为空
         return true;

     if (a == NULL || b == NULL)//有一棵树为空
         return false;

     if (a->data != b->data)//树结点的值不相等
         return false;

     if (a->left == NULL && b->left == NULL)//两棵树的左子树都为空
         return TreeCmp(a->right, b->right);//就比较右子树

     //两棵树的左子树都不为空,且两个值相等就比较两棵树的子树
     if (a->left != NULL && b->left != NULL &&(a->left->data == b->left->data))
         return (TreeCmp(a->left,b->left)&&TreeCmp(a->right,b->right));

     //交换后再比较
     else
         return (TreeCmp(a->left,b->right)&&TreeCmp(a->right,b->left));
 }

03-树1 树的同构 (C语言链表实现)的更多相关文章

  1. 小白专场-树的同构-c语言实现.md

    目录 一.题意理解 二.求解思路 2.1 二叉树表示 2.2 程序框架搭建 2.3 如何建二叉树 2.4 如何判别两二叉树同构 更新.更全的<数据结构与算法>的更新网站,更有python. ...

  2. 【查找结构5】多路查找树/B~树/B+树

    在前面专题中讲的BST.AVL.RBT都是典型的二叉查找树结构,其查找的时间复杂度与树高相关.那么降低树高自然对查找效率是有所帮助的.另外还有一个比较实际的问题:就是大量数据存储中,实现查询这样一个实 ...

  3. 9-11-Trie树/字典树/前缀树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第9章  查找 - Trie树/字典树/前缀树(键树) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚 ...

  4. HTTP协议漫谈 C#实现图(Graph) C#实现二叉查找树 浅谈进程同步和互斥的概念 C#实现平衡多路查找树(B树)

    HTTP协议漫谈   简介 园子里已经有不少介绍HTTP的的好文章.对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将HTTP协议的元素进行分类讲 ...

  5. Tire树(字典树)

    from:https://www.cnblogs.com/justinh/p/7716421.html Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,P ...

  6. BZOJ 3110: [Zjoi2013]K大数查询 [树套树]

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6050  Solved: 2007[Submit][Sta ...

  7. BZOJ4170 极光(CDQ分治 或 树套树)

    传送门 BZOJ上的题目没有题面-- [样例输入] 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 [样例输出] 2 3 3 ...

  8. Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结

    Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...

  9. bzoj3262: 陌上花开(树套树)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  10. bzoj3295: [Cqoi2011]动态逆序对(树套树)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

随机推荐

  1. Step by step Dynamics CRM 2013安装

    原创地址:http://www.cnblogs.com/jfzhu/p/4008391.html 转载请注明出处   SQL Server可以与CRM装在同一台计算机上,也可安装在不同的计算机上.演示 ...

  2. maven仓库信息分析站点推荐

    maven是java的一个依赖,打包管理的工具,稍微大一点的java项目都需要使用maven. 随着java的壮大,maven仓库越来越大,仓库中的jar包有60多万,各种group,各种构件,各种版 ...

  3. C语言 · 寻找数组中的最大值

    问题描述 对于给定整数数组a[],寻找其中最大值,并返回下标. 输入格式 整数数组a[],数组元素个数小于1等于100.输出数据分作两行:第一行只有一个数,表示数组元素个数:第二行为数组的各个元素. ...

  4. 《FaceBook效应》——读后总结

    这本书讲述了facebook从如何创建.到风靡全球,并结合facebook的网络效应讲述为什么facebook可以做到社交龙头.读这本书的时候,也可以看看<社交网络>这部电影. faceb ...

  5. [Hadoop大数据]——Hive连接JOIN用例详解

    SQL里面通常都会用Join来连接两个表,做复杂的关联查询.比如用户表和订单表,能通过join得到某个用户购买的产品:或者某个产品被购买的人群.... Hive也支持这样的操作,而且由于Hive底层运 ...

  6. sql的行转列(PIVOT)与列转行(UNPIVOT)

    在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测 ...

  7. Web APi之消息处理管道(五)

    前言 MVC有一套请求处理的机制,当然Web API也有自己的一套消息处理管道,该消息处理管道贯穿始终都是通过HttpMessageHandler来完成.我们知道请求信息存在 RequestMessa ...

  8. 门外汉的IT

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机很早就走入了我的生活.小学时,家里放一台联想“天琴”的电脑.它霸气的音箱造型 ...

  9. JSON入门指南--客户端处理JSON

    在传统的Web开发过程中,前端工程师或者后台工程师会在页面上写后台的相关代码,比如在ASP.NET MVC4里面写如下代码: @Html.TextBoxFor(m => m.UserName, ...

  10. iOS开发之使用XMPPFramework实现即时通信(一)

    关于XMPP的理论介绍在本篇博客中就不做赘述了,如何在我们之前的微信中加入XMPP协议来实现通信呢?下面将会介绍一下XMPP的基本的知识,让我们的微信可以实现互联通信.要做的准备工作是要有服务器支持X ...