pta 编程题6 树的同构
其它pta数据结构编程题请参见:pta
题目请参见:树的同构
因题目中左右子树是按照下标给出,因此用数组存放树是更好的方法。
判断两棵树是否同构:用递归的方法。如果当前两个结点都为空,则返回TRUE;如果一个结点空一个不空,或者两个结点都不为空但是结点存储的数据不同,则返回FALSE。然后递归地的调用函数,判断是否左子树和左子树相同且右子树和右子树相同,或者左子树和左子树相同且右子树和右子树相同。
#include <iostream>
using namespace std; struct Node
{
char data;
int left;
int right;
}; int buildTree(Node tree[]);
bool isSame(Node tree1[], int root1, Node tree2[], int root2); int main()
{
Node tree1[], tree2[];
int root1, root2;
root1 = buildTree(tree1);
root2 = buildTree(tree2);
if (isSame(tree1, root1, tree2, root2)) cout << "Yes";
else cout << "No";
return ;
} int buildTree(Node tree[])
{
int num, i, root = -;
char d, l, r;
cin >> num;
int judgeRoot[] = {};
for (i = ; i < num; i++)
{
cin >> d >> l >> r;
tree[i].data = d;
if (l != '-')
{
tree[i].left = l - '';
judgeRoot[l - ''] = ;
}
else tree[i].left = -;
if (r != '-')
{
tree[i].right = r - '';
judgeRoot[r - ''] = ;
}
else tree[i].right = -;
}
for (i = ; i < num; i++)
{
if (judgeRoot[i] == ) root = i;
}
return root;
} bool isSame(Node tree1[], int r1, Node tree2[], int r2)
{
if (r1 == - && r2 == -) return true;
if (r1 == - && r2 > - || r1 > - && r2 == -) return false;
if (tree1[r1].data != tree2[r2].data) return false;
return isSame(tree1, tree1[r1].left, tree2, tree2[r2].left)
&& isSame(tree1, tree1[r1].right, tree2, tree2[r2].right)
|| isSame(tree1, tree1[r1].left, tree2, tree2[r2].right)
&& isSame(tree1, tree1[r1].right, tree2, tree2[r2].left);
}
pta 编程题6 树的同构的更多相关文章
- 【PTA】浙江大学数据结构慕课 课后编程作业 03-树1 树的同构
题目内容 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右 ...
- pta 编程题14 Huffman Codes
其它pta数据结构编程题请参见:pta 题目 题目给出一组字母和每个字母的频数,因为哈夫曼编码不唯一,然后给出几组编码,因为哈夫曼编码不唯一,所以让你判断这些编码是否符合是哈夫曼编码的一种. 解题思路 ...
- pta 编程题13 File Transfer
其它pta数据结构编程题请参见:pta 这道题考察的是union-find并查集. 开始把数组中每个元素初始化为-1,代表没有父节点.为了使树更加平衡,可以让每一个连通分量的树根的负值代表这个连通分量 ...
- pta 编程题8 Tree Traversals Again
其它pta数据结构编程题请参见:pta 这次的作业考察的是树的遍历. 题目的输入通过栈的pop给出了树的中序遍历的顺序.根据push和pop的顺序构造树的方法为:定义一个变量father来确定父节点, ...
- pta 编程题7 List Leaves
其它pta数据结构编程题请参见:pta 这次的编程作业要求从上到下,从左到右输出一棵树的叶子节点,即树的层序遍历,用队列的方式来实现. 注意enqueue和dequeue函数参数为Queue & ...
- pta 编程题20 旅游规划
其它pta数据结构编程题请参见:pta 题目 这个最短路径问题只需要求两点之间的最短路径,因而在Dijikstra算法中当求出目标点的最短路径之后跳出循环即可. #include <iostre ...
- pta 编程题21 公路村村通
其它pta数据结构编程题请参见:pta 题目 这道题考察最小生成树问题,用的是Prim算法. 和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录. #i ...
- pta编程题19 Saving James Bond 2
其它pta数据结构编程题请参见:pta 题目 和简单版本不同的是,简单版本只需判断能否到达岸边,而这个版本要求求出最少跳数的路径. 简单版本用dfs实现,而这道题用BFS实现. 注意: 岛半径为7.5 ...
- pta 编程题16 Saving James Bond - Easy Version
其它pta数据结构编程题请参见:pta 题目 主要用到了深度优先搜索. #include <iostream> using namespace std; struct Vertex { i ...
随机推荐
- Algorithms - Fibonacci Number
斐波那契数列(Fibonacci Number)从数学的角度是以递归的方法定义的: \(F_0 = 0\) \(F_1 = 1\) \(F_n = F_{n-1} + F_{n-2}\) (\(n \ ...
- python drift
install dependency(optional):(本文来自 不才b_d 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/sinat_36184075/arti ...
- java怎样防止内存溢出
引起内存溢出的原因有很多种,小编列举一下常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据:2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收:3.代码中存在死 ...
- HTTP的学习记录(二)头部
本文主要讲一些 HTTP头部的信息 首先看一段 惊为天人 的文章. 来自于 <淘宝技术这十年> 你发现快要过年了,于是想给你的女朋友买一件毛衣,你打开了www.taobao.com.这时你 ...
- Uva12174
#include <bits/stdc++.h> using namespace std; ; int t; int s,n; ]; ]; ]; void init(){ memset(a ...
- 1088 Rational Arithmetic(20 分)
For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...
- 014 Longest Common Prefix 查找字符串数组中最长的公共前缀字符串
编写一个函数来查找字符串数组中最长的公共前缀字符串. 详见:https://leetcode.com/problems/longest-common-prefix/description/ 实现语言: ...
- eclipse ctrl+h
之前我的eclipse使用ctrl + h 出现的总是Plug-in Search ,总是需要点那个小三角才能找到File Search ,深感使用不便, 修改方法:Window->Genera ...
- UVALive - 6436
题目链接:https://vjudge.net/contest/241341#problem/C Tree Land Kingdom is a prosperous and lively kingdo ...
- 牛客网Java刷题知识点之表达式类型的自动提升
不多说,直接上干货!