PTA 03-树1 树的同构

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

03-树1 树的同构

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

思想

主框架:
1.建立二叉树->BuildTree(TNode T[])
2.判断是否同构->issame(int r1,int r2)

存储:

BTNode T1[MaxTree],T2[MaxTree];

使用了静态数组来存储以结构体为单元的两个二叉树

判断根节点:
巧妙了使用的check数组。
原理:在静态数组中left和right出现过的下标,说明是别人的子树。因此如果没有出现过,则为根节点。用check数组记录是否出现过。

注意

1.BuildTree中的scanf()的格式
一开始我写了scanf("%c %c %c",&T[i].data,&lc,&rc);
系统一直报错
因为我们的输入是不断有回车换行的

代码

#include<iostream>
using namespace std;
#define MaxTree 10
#define null -1

struct BTNode{
    char data;
    int lchild,rchild;
};
BTNode T1[MaxTree],T2[MaxTree];//left和right不是指针是数

int BuildTree(BTNode T[]){
    int N;
    scanf("%d",&N);
    int check[N],root=-1;//初始化root
    for(int i=0;i<N;i++){check[i]=0;}//查root的数组
    for(int i=0;i<N;i++){
        char lc,rc;
        scanf("\n%c %c %c",&T[i].data,&lc,&rc);
        //左孩子
        if(lc!='-'){
            T[i].lchild=lc-'0';
            check[T[i].lchild]=1;
        }else{
            T[i].lchild=null;//- -1记录
        }
        //右孩子
        if(rc!='-'){
            T[i].rchild=rc-'0';
            check[T[i].rchild]=1;
        }else{
            T[i].rchild=null;//- -1记录
        }
    }
    for(int i=0;i<N;i++){
        if(check[i]==0){
            root=i;break;
        }
    }
    return root;
}

int issame(int R1,int R2){
    if(R1==null&&R2==null)//两根/叶节点都为空->同构
        return 1;
    if((R1==null&&R2!=null)||(R1!=null&&R2==null))//其中一个根节点为空另一个不为空->不同构
        return 0;
    if(T1[R1].data!=T2[R2].data)//两个对应结点数值不同->不同构
        return 0;
    if(T1[R1].lchild==null&&T2[R2].lchild==null)//左子树为空,递归右子树
        return issame(T1[R1].rchild,T2[R2].rchild);
    if((T1[R1].lchild!=null&&T2[R2].lchild!=null)&&(T1[T1[R1].lchild].data==T2[T2[R2].lchild].data))//左子树不为空,且左子树相同,递归左右子树
        return issame(T1[R1].lchild,T2[R2].lchild)&&issame(T1[R1].rchild,T2[R2].rchild);
    else{//左子树有不为空的,或者左右子树值的大小不一样的
        return issame(T1[R1].lchild,T2[R2].rchild)&&issame(T1[R1].rchild,T2[R2].lchild);//交换左右子树对比是否相同
    }
}

int main(){
    int R1,R2;
    R1=BuildTree(T1);
    R2=BuildTree(T2);
    if(issame(R1,R2)){
        printf("Yes");
    }else{
        printf("No");
    }
    return 0;
}

疑问

其实issame函数中的判断逻辑为什么是这样的呢?我也不是很清楚,有点迷惑,是看着小白专场打的代码。求大神指点!

PTA:03-树1 树的同构 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。 输入格式: 输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写字母、其左孩子结点的编号、右孩子结点的编号。如果孩子结点为空,则在相应位置上给出“-”。给出的数据间用一个空格分隔。注意:题目保证每个结点中存储的字母是不同的。 输出格式: 如果两棵树是同构的,输出“Ye 阅读详情

相关推荐

STM32解析航模遥控器的PPM信号

使用STM32对航模遥控器的PPM信号进行解析

qq_44343584的博客 9734

PTA03-树1 树的同构

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

qq_45640206的博客 332

京东云鼎环境配置与API安全接入实战:ISV服务商如何搞定数据加密与商家授权

本文详细介绍了京东云鼎环境配置与API安全接入的实战指南,帮助ISV服务商解决数据加密与商家授权等核心问题。通过京东开放平台的应用申请流程,结合多租户数据隔离策略和自动化授权实现,确保电商生态中的安全高效运营。文章还提供了避坑指南,助力开发者规避常见配置错误。

weixin_28705087的博客 353

PTA || 03-树1 树的同构

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

xuuyann 666

Ubuntu 22.04 LTS升级OpenSSH 9.6p1完整指南(附OpenSSL 3.2.0适配方案)

本文详细介绍了在Ubuntu 22.04 LTS系统中升级OpenSSH至9.6p1版本的全流程,包括OpenSSL 3.2.0的适配方案。从准备工作、依赖库安装、源代码编译到系统集成与配置,提供了完整的操作指南和常见问题解决方法,帮助用户安全高效地完成升级,提升服务器安全性和性能。

i8j9k0l1的博客 320

论文阅读:Visual Relationship Detection with Language Priors

Visual Relationship Detection with Language Priors(ECCV2016) 文章   尽管大多数的relationship并不常见,但是它们的object和predicate却更频繁地独立出现。paper用这个insight分别独立训练训练object和predicate的模型,然后再进行组合来预测relationship。Visual relatio...

Kivee的博客 2877

PTA——数据结构-03-树1 树的同构 (25 分)

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

Super_Bb 1494

ADB 安装教程:如何在 Windows、 Linux 上安装 Android Debug Bridge

本文介绍了在Windows和Linux系统上安装ADB(Android调试桥)的方法。对于Windows系统:1)从官网下载ADB工具并解压;2)通过命令提示符验证安装;3)配置环境变量以实现全局使用;4)再次验证全局ADB功能。Linux系统可通过包管理器直接安装(如Ubuntu使用apt,Fedora使用dnf),安装后同样需验证版本信息确认成功。两种系统安装完成后,都能通过"adb version"命令检查安装状态。

qq_53545309的博客 444

【PTA】03-树1 树的同构

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

qq_39711485的博客 200

全球SAR卫星大盘点与回波数据处理专栏目录

本专栏将详细介绍各国各地区的SAR卫星的特点和性能,以及SAR回波数据的处理方法和技巧。主要介绍民用和商用SAR卫星,帮助你了解商业SAR卫星的最新动态和技术,MATLAB代码将全部开源。以下是专栏目录,持续更新中。

3165

基于知识图谱的智能工作流引擎

随着大数据和人工智能技术的快速发展,企业和组织对数据的依赖程度日益增加。为了更好地管理和利用这些数据,知识图谱逐渐成为一种重要的工具。知识图谱不仅能够以结构化的方式表示复杂的知识,而且能够通过推理和查询提供深层次的信息。然而,如何将知识图谱应用于实际业务场景中,尤其是如何构建智能工作流引擎,仍然是一个具有挑战性的问题。智能工作流引擎是一种能够自动化执行复杂业务流程的系统,它可以通过对业务规则和数据的分析,自动生成和优化工作流,从而提高工作效率和准确性。

AI天才研究院 1872

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

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

AI Chen的博客 2119

ChatTutor:让AI老师“会写会画”,打造可视化、互动式智能教育新范式

ChatTutor是一款突破性的开源AI教学助手,通过可视化电子白板实现"边讲边写"的沉浸式教学体验。该项目支持数学公式手写输入、动态函数绘图、自动生成思维导图等功能,采用多智能体架构实现专业协同。未来将扩展至编程、物理等STEM教育领域,适用于学生自学、教师备课和教育平台集成。作为MIT协议开源项目,ChatTutor通过赋予AI"教学肢体语言",推动教育从信息传递转向可视化互动建构,重新定义了AI助教的可能性。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 423

pta03-树1 树的同构

pta树的同构

m0_51140304的博客 370

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

PTA数据结构-03-树1 树的同构

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

hdu_ch的博客 324

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

03-树1 树的同构 PTA答案

个结点,给出该结点中存储的 1 个英文大写字母、其左孩子结点的编号、右孩子结点的编号。注意:题目保证每个结点中存储的字母是不同的。2​,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。输入给出2棵二叉树的信息。创建树的步骤和题目《03-树2 List Leaves》极为相似。如果两棵树是同构的,输出“Yes”,否则输出“No”。(≤10),即该树的结点数(此时假设结点从 0 到。03-树1 树的同构。

2301_80252242的博客 286

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

PTA 数据结构 03-树1 树的同构 (25分) 下面给出老师的代码: `#include #define Null -1 #define MaxTree 10 #define Tree int #define ElementType char using namespace std; struct TreeNode { Tree Left; Tree right; ElementType El...

qq_44978495的博客 318

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

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

橘嘉禾 190

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

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

qq_43457051的博客 1108

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

#include #define Maxsize 10 using namespace std; struct TreeNode{ int left; int right; char index; }T1[Maxsize],T2[Maxsize]; int isomorphic(int R1,int R2) { if((R1==-1)&&(R2==-1)) return 1;

努力努力再努力 524

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

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

Learner_HJ的博客 922

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

题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3树的同构(25分) 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 ...

weixin_30702413的博客 193

java 树的同构_PTA——03-树1 树的同构(25 分)【java语言实现】

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

weixin_39637397的博客 120

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

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

apple_55860091的博客 124

浙大PTA 编程题 03-树1 树的同构(c++)

思路: 用结构数组来表示树,数组有三个元素,分别是结点名称、左儿子编号、右儿子编号。 重点: 1.判断树的根结点位置: 因为数据的输入并不是按找树的层来输入的,所以需要我们自行判断根结点的位置。根据树的根结点特点可知,只要不是其他结点的儿子的,就一定是根结点,所以,在输入的数据中,总编号应该是0~N,而左右儿子中的编号一定是0~N少一个(因为根结点的编号是不会出现在儿子编号里的)和 ' - ' ,所以,我们只需要把输入数据中的左儿子右儿子编号遍历,然后找出没有出现的那个编号,就是根结点的编号了。

lzyhhhhh的博客 245

PTA-数据结构 编程题03-树1 树的同构 (25 分)

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

qq_43683133的博客 547
上一篇: PTA 02-线性结构3 Reversing Linked List
下一篇: PTA 03-树2 List Leaves
viV_ibeea
博客等级 码龄7年 3粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值