链接

树的同构

题意

同构的定义: 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。

给两棵树,判断是否同构

做法

先建树,然后判断,知道怎么判断就知道怎么写了,具体实现看代码

代码

/*
Name: hello world.cpp
Author: AA
Description: 唯代码与你不可辜负
*/
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define maxn 20100
typedef struct Node {
char data;
int left;
int right;
} Tree;
Tree t1[maxn], t2[maxn];
int build(Tree T[]) {
int n, cherk[maxn], root = -1;
char cl, cr;
scanf("%d", &n);
getchar();
if(n) {
for(int i = 0; i < n; i++)
cherk[i] = 0;
for(int i = 0; i < n; i++) {
scanf("%c %c %c", &T[i].data, &cl, &cr);
getchar();
if(cl != '-') {
T[i].left = cl - '0';
cherk[T[i].left] = 1;
} else
T[i].left = -1;
if(cr != '-') {
T[i].right = cr - '0';
cherk[T[i].right] = 1;
} else
T[i].right = -1;
}
for(int i = 0; i < n; i++) {
if(cherk[i] == 0) {
root = i;
break;
}
}
}
return root;
}
bool Isomorphic(int root1, int root2) {
if(root1 == -1 && root2 == -1) return true;//都是空的,符合
else if((root1 == -1 && root2 != -1) || (root1 != -1 && root2 == -1)) return false; //一个空一个不空当然不符合
else if(t1[root1].data != t2[root2].data) return false; //元素不相等不符合
else if(t1[root1].left == -1 && t2[root2].left == -1) //左子树都是空的话,就判断右子树
return Isomorphic(t1[root1].right, t2[root2].right);
else if(t1[t1[root1].left].data == t2[t2[root2].left].data)//左子树的元素都相同的话就把他们的左右子树都判断
return (Isomorphic(t1[root1].left, t2[root2].left) && Isomorphic(t1[root1].right, t2[root2].right));
else //最后是把左右子树交换来判断
return (Isomorphic(t1[root1].left, t2[root2].right) && Isomorphic(t1[root1].right, t2[root2].left));
}
int main() {
int root1, root2;
root1 = build(t1);
root2 = build(t2);
if(Isomorphic(root1, root2))
puts("Yes");
else
puts("No");
}

PAT-树的同构的更多相关文章

  1. PAT 03-树1 树的同构 (25分)

    给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右孩子互换后 ...

  2. 03-树1 树的同构 (C语言链表实现)

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

  3. BZOJ 4337: BJOI2015 树的同构 树hash

    4337: BJOI2015 树的同构 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4337 Description 树是一种很常见的数 ...

  4. SDUT 3340 数据结构实验之二叉树一:树的同构

    数据结构实验之二叉树一:树的同构 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 给定两棵树 ...

  5. PTA 深入虎穴 (正解)和树的同构

    在上一篇博客中分享了尝试用单链表修改程序,虽然在Dev上运行没有错误,但是PTA设置的测试点有几个没有通过,具体不清楚问题出现在哪里,所以现在把之前正确的程序放在这里. 7-2 深入虎穴 (30 分) ...

  6. 4337: BJOI2015 树的同构

    题解: 树的同构的判定 有根树从根开始进行树hash 先把儿子的f进行排序 $f[i]=\sum_{j=1}^{k} { f[j]*prime[j]} +num[i]$(我没有仔细想这样是不是树是唯一 ...

  7. [BJOI2015]树的同构

    嘟嘟嘟 判断树的同构的方法就是树上哈希. 如果树是一棵有根树,那么只要从根节点出发dfs,每一个节点的哈希值等于按传统方式算出来的子树的哈希值的结果.需要注意的是,算完子树的哈希值后要先排序再加起来, ...

  8. bzoj4337树的同构

    树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树. 对于两个树T1和T2,如果能够把树T1的所有点重 ...

  9. bzoj4337: BJOI2015 树的同构 树哈希判同构

    题目链接 bzoj4337: BJOI2015 树的同构 题解 树哈希的一种方法 对于每各节点的哈希值为hash[x] = hash[sonk[x]] * p[k]; p为素数表 代码 #includ ...

  10. 【BZOJ4337】BJOI2015 树的同构 括号序列

    [BZOJ4337]BJOI2015 树的同构 Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱 ...

随机推荐

  1. 5、Linux的常用命令

    ls 查看当面目录结构 ls -l 列表查看当前目录 cd:切换目录 pwd:显示目前的目录 mkdir:创建一个新的目录 rmdir:删除一个空的目录 cp: 复制文件或目录 rm: 移除文件或目录 ...

  2. linux下的mongodb数据库原生操作

    mongodb,是一种结构最像mysql的nosql mysql中的数据库,mongodb中也有,区别在于, myql中数据库下的是表,字段和数据的形式存在 mongodb数据库下的是叫集合(和pyt ...

  3. python进行excel操作

    使用模块 xlsxwriter : http://xlsxwriter.readthedocs.io/ 可以自定义表格合并.样式 加各种2D图表 写入格式化表格数据时,与pandas结合速度更快!

  4. magento 的一些关于addFieldToFilter的查询

    1,匹配country_id的首字母,查询国家,返回数组 //查询国家数据集 $countryCollection=Mage::getResourceModel('directory/country_ ...

  5. Spring MVC-表单(Form)标签-复选框(Checkbox)示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_checkbox.htm 说明:示例基于Spring MVC 4.1.6. 以下示 ...

  6. Python标准库:内置函数range(stop) range(start, stop[, step])

    本函数是产生一系列序列的数组,返回迭代子.參数stop是终止的数字:參数start是指明開始数列開始值:參数step是数列之间的差值. 因此这个函数就是产生以start为起点.以stop为终点,以st ...

  7. [Android 4.4.2] 泛泰A850 Mokee4.4.2 20140509 RC2.0 by syhost

    感谢: tenfar(R大师),zhaochengw(z大).windxixi(雪狐),xuefy(大星星).suky, cofface 感谢參考代码:  Cyanogenmod , martincz ...

  8. 去掉文本框前后的空格(JS+JQuery)

    表单验证时,需要去除文本框前后的空格才可以正确通过验证.以前看到过一句话:任何设计和代码都要对用户足够宽容. <input type="text" class="p ...

  9. [jqpolt] formatString 日期格式化列表

    // 年 %Y   2008 %y   08 // 月 %m   09 %#m   9 %B   September %b   Sep // 日 %d   05 %#d   5 %e   5 %A   ...

  10. AtCoder Beginner Contest 054

    1. A - One Card Poker 水题,直接输出大小. 2. B - Template Matching 暴力,每个位置枚举,比较. 3. C - One-stroke Path n的大小只 ...