浙大数据结构习题笔记:03-树1 树的同构 (25分)

PTA-7-3 树的同构 题目描述: 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 现在给定两棵树,请你判断是否是同构的。 很惭愧,这个题目做的很复杂,但是思路很清晰,希望能分享出来, 思路和难点如下: 同构的树有一个特点,那就是每一层的... 阅读详情

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

题目

给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。

图1
在这里插入图片描述
图2
在这里插入图片描述

现给定两棵树,请你判断它们是否是同构的。
输入格式:
输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写字母、其左孩子结点的编号、右孩子结点的编号。如果孩子结点为空,则在相应位置上给出“-”。给出的数据间用一个空格分隔。注意:题目保证每个结点中存储的字母是不同的。

输出格式:
如果两棵树是同构的,输出“Yes”,否则输出“No”。

输入样例1(对应图1):

8
A 1 2
B 3 4
C 5 -
D - -
E 6 -
G 7 -
F - -
H - -
8
G - 4
B 7 6
F - -
A 5 1
H - -
C 0 -
D - -
E 2 -

输出样例1:

Yes

输入样例2(对应图2):

8
B 5 7
F - -
A 0 3
C 6 -
H - -
D - -
G 4 -
E 1 -
8
D 6 -
B 5 -
E - -
H - -
C 0 2
G - 3
F - -
A 1 4

输出样例2:

No

感悟

这道题重点考察的有两方面,一个是输入的形式规范与找出根的过程,另一个是判断程序中对复杂递归的使用,说实话那一大段递归也是看了好久才明白,写了一下也是比较繁琐的,可能记住这种类型对之后很有帮助吧

源码

#include <iostream>
#include <malloc.h>
using namespace std;
#define MAX_TREE 10
#define ElemType char
#define Tree int
#define NULL -1

struct TreeNode{
    ElemType elem;
    Tree left;
    Tree right;
}T1[MAX_TREE] ,T2[MAX_TREE];

Tree BuildTree(struct TreeNode T[])
{
    int N;
    Tree root=0;
    char left,right;
    scanf("%d\n",&N);
    if(N == 0){
        return NULL;
    }
    for(int i=0;i<N;i++){
        scanf("%c %c %c\n",&T[i].elem,&left,&right);
        //格式化输入,注意有\n
        if(left == '-'){
            T[i].left = NULL;
        }else{
            T[i].left = left - '0';
            root -= T[i].left;
        }
        if(right == '-'){
            T[i].right = NULL;
        }else{
            T[i].right = right - '0';
            root -= T[i].right;
        }
        root += i;
        //定位根节点位置:没有被其他所有节点关联的节点为根
    }
    return root;
}

int same(Tree R1,Tree R2)
{
    if((R1==NULL)&&(R2==NULL)){	//两树为空——相同
        return 1;
    }
    if(((R1 == NULL)&&(R2 != NULL))||((R1 != NULL)&&(R2== NULL))){
        return 0;	//两树各有一个为空——不同
    }
    if(T1[R1].elem != T2[R2].elem){
        return 0;	//两根元素不同——必不同
    }
    if((T1[R1].left == NULL)&&(T2[R2].left == NULL)){
        return same(T1[R1].right,T2[R2].right);
        //两树左子树均为空——看右子树的状况
    }
    
    if(((T1[R1].left != NULL) && (T2[R2].left != NULL)) 	//两树左子树均存在 
        &&((T1[T1[R1].left].elem)==(T2[T2[R2].left].elem))){	//且左子树节点相同时
         return (same(T1[R1].left,T2[R2].left)&&	//同时判断两树左右树是否相同
                same(T1[R1].right,T2[R2].right));    
    }else	//如果柞子树节点不同——只可能是左右交换了——交换判断左右
        return (same(T1[R1].left,T2[R2].right)&&	
                same(T1[R1].right,T2[R2].left));
    
}

int main()
{
    Tree R1,R2;
    R1 = BuildTree(T1);
    R2 = BuildTree(T2);
    if(same(R1,R2)){
        printf("Yes\n");
    }else{
        printf("No\n");
    }

    return 0;
}
03-树1 树的同构 03-树1 树的同构   (25分) 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1 图2 现给定两棵树,请你判断它们是否是同构的。 输入格式: 阅读详情

相关推荐

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

03-树1 树的同构(25 分) 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1 图2 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N(≤...

中央单元 2586

数据结构与算法题目集(中文)7-3 树的同构 (25分)

1.题目 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1 图2 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负...

且慢 470

MOOC浙大数据结构课后题记录——PTA数据结构题目集(全)

本博客是为了记录学习数据结构时做的题集,若代码有疏漏欢迎指出! ps:因为已经学过c++了所以就都用c++写了。

cos的博客 1万+

7-8 树的同构 (25分)(详解)

详解明天在更新。 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1 图2 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出...

ZZULI_星.夜 2667

unity游戏开发日志(一)将mmd模型导入unity,并解决材质丢失的问题

unity音乐游戏开发,导入角色模型并解决材质问题

yizhigou1的博客 1765

Qt跨平台CAN通信实战:Vector、PCAN与周立功设备统一接口设计

本文针对Qt开发中常见的多品牌CAN设备兼容难题,提出了一套统一的跨平台CAN通信接口设计方案。通过抽象层封装,实现了对Vector、PCAN和周立功设备的统一操作,上层业务代码无需修改即可在不同硬件间切换,有效解决了驱动API差异、环境配置复杂和维护成本高等痛点,显著提升了代码复用率和开发效率。

weixin_29161785的博客 333

树的同构 03-树1 树的同构(25 分)(C++)浙大数据结构

原题:03-树1 树的同构(25 分) 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤1...

ilivid的博客 623

遥感图像融合实战:5分钟搞懂全色与多光谱图像如何提升分辨率(附Python代码)

本文通过实战案例,详细解析了如何利用全色锐化技术融合全色与多光谱遥感图像,以提升图像分辨率。文章深入浅出地介绍了核心概念、环境配置、经典GS融合算法的Python代码实现,并对比了不同算法的优劣,最后提供了效果评估方法与实战陷阱分析,帮助读者快速掌握遥感图像融合的关键技术。

weixin_29041195的博客 396

浙大数据结构03-树1 树的同构 (25分)

给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1 图2 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结...

leslie___的博客 639

BERT + BiLSTM-CRF 处理流程

BERT是一个基于 Transformer 的预训练语言模型。与传统的语言模型不同,BERT 是双向的,即它同时利用上下文信息进行词表示学习。BERT 在大规模语料库上进行预训练,可以捕捉到深层次的语言知识和上下文关系,生成非常丰富的词向量表示。在序列标注任务中,BERT 被用作输入文本的编码器,将每个词映射为上下文相关的词嵌入(embeddings)。

AI Agent 首席体验官 2258

卷积神经网络中的边缘检测:从Canny算法到深度学习(PyTorch实现)

本文系统梳理了边缘检测从经典Canny算法到深度学习方法的演进,重点解析了Canny算法的数学原理及其对卷积神经网络设计的深远影响。通过PyTorch实战,详细演示了如何构建并训练一个基于HED架构的深度学习边缘检测模型,并探讨了模型优化、评估及与传统方法融合的高级技巧。

jenkins8butler的博客 154

慕课浙大数据结构-03-树1 树的同构 (25分)

参考这篇文章写的代码03-树1 树的同构 (25分) 1.C语言中的字符常量是用单引号括起来的一个字符(注意是单引号不是双引号:if(cl!=’-’){ //将单引号错写为双引号会报错。 字符串读取:scanf("%s", string); 字符读取:scanf("%c", &c);(注意这个需要加取地址运算发,但是字符串不需要,因为是字符串数组,string直接是数组名,是首地址,因此...

weixin_43919570的博客 236

高通camera调试经验总结

修改AF对焦模式 adb shell setprop vendor.debug.camera.af.manual 2 //使能手动对焦 adb shell setprop vendor.debug.camera.af.manual 0 //使能自动对焦

weixin_43381364的博客 1万+

[浙大数据结构] 03-树1 树的同构 (25分)

1 题目描述 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1 图2 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10...

努力变得不菜的菜鸡的博客 647

62. 如何通过增强(Enhancement) 的方式给 SAP ABAP 标准程序增添新功能

本文通过一个实际的例子,介绍了如何不通过修改 SAP 标准 ABAP 程序源代码的方式,对其的功能进行增强,即采取 ABAP 增强开发的方式进行二次开发,这是一种在实际 SAP 项目实施过程中使用非常广泛的技术。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3313

华为od机试|华为od机试真题2025|华为od题库|华为od机考|2025C卷B卷

华为od机试|华为od机试真题2025|华为od题库|华为od机考|华为od机试|华为od机试真题2025|华为od题库|华为od机考|华为od机试|华为od机试真题2025|华为od题库|华为od机考|华为od机试|华为od机试真题2025|华为od题库|华为od机考|B卷C卷

u014481728的博客 10万+

03-树1 树的同构(浙大数据结构PTA习题)

给定两棵树 T1​ 和 T2​。如果 T1​ 可以通过若干次左右孩子互换就变成 T2​,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。现给定两棵树,请你判断它们是否是同构的。输入给出2棵二叉树的信息。

Learner_HJ的博客 923

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

浙大数据结构 树的同构

03-树1 树的同构 (25 分) 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1 图2 现给定两棵树,请你判断它们是否是同构的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树...

loveAC233的博客 416

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

浙大数据结构MOOC作业题目集2020——03-树1 树的同构 (25分)

给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写字母、其左孩子结点的编号、右孩子结点的编号。如果孩子结点为空,则在相应位置上给

沃然 460

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

浙大数据结构习题笔记:03-树2 List Leaves (25分)

03-树2 List Leaves (25分) 原题如下: Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. Input Specification: Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) whi

Jimobbb的博客 593

浙大数据结构全题解汇总(C++实现)

浙大数据结构题解汇总

qq_74924951的博客 1093

浙大数据结构习题笔记:03-树3 Tree Traversals Again (25分)

03-树3 Tree Traversals Again (25分) 分析 看了下视频解析,觉得除了常规的借助先序与中序遍历把这棵树重新构造出来再遍历外,视频中借助规律和递归分治法真的是很简洁。 主函数中,在题中可以明白,Push进去的是先序的内容,Pop出去的是中序的内容,这样遍历完成所有输入后,可以得到pre in两个代表先序与后序遍历的数组。 之后,关键是围绕着这两个数组找出后序post的顺序,我们发现一些规律: 先序遍历中:根一定是第一项 中序遍历中:根的左右分别代表左右子树 后序遍历中:根一定是

Jimobbb的博客 454

浙大数据结构03-树1 树的同构 (25 分)

题目: 输入样例1(对应图1): 8 A 1 2 B 3 4 C 5 - D - - E 6 - G 7 - F - - H - - 8 G - 4 B 7 6 F - - A 5 1 H - - C 0 - D - - E 2 - 输出样例1: Yes 输入样例2(对应图2): 8 B 5 7 F - - A 0 3 C 6 - H - - D - - G 4 - E 1 - 8 D 6 - B 5 - E - - H - - C 0 2 G - 3 F - - A ...

m0_53859341的博客 110

浙大数据结构慕课课后题(03-树2 List Leaves)

给定一棵树,您应该按照从上到下、从左到右的顺序列出所有叶子。

Charon_super的博客 838

浙大数据结构课程习题 03-树2 List Leaves (25分) 的C语言实现

@[TOC](浙大数据结构课程习题 03-树2 List Leaves (25分) 的C语言实现) 代码实现 #include<stdio.h> #include<stdlib.h> #define MaxSize 10 #define MaxTree 10 #define ElementType int #define Tree int #define Null -1 struct TreeNode { ElementType data; Tree Left; Tree

weixin_45415929的博客 303

慕课浙大数据结构-03-树2 List Leaves (25分)

参考这篇文章 《数据结构》03-树2 List Leaves 1.flag变量的使用,自己写不出来。 if(t.Left==Null&&t.Right==Null){ if(flag){ cout<<" "; } else{ ...

weixin_43919570的博客 239
上一篇: 浙大数据结构习题笔记:二叉树各种遍历完全代码实现
下一篇: 浙大数据结构习题笔记:二叉搜索树
Jimobbb
博客等级 码龄7年 33粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值