PTA 树的同构

news2024/11/14 23:03:40

题目

给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图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 <stdio.h>
#define max 11
#define Null -1
typedef struct TNode *PtrToTNode;
struct TNode {
    char data;
    int right, left;
} T1[max], T2[max];
typedef PtrToTNode Tree;

void ReadTree(Tree T, int N) {
    for (int i = 0; i < N; i++) {
        char data, left, right;
        scanf("\n%c %c %c", &data, &left, &right);
        T[i].data = data;
        if (left == '-') {
            T[i].left = Null;
        } else
            T[i].left = left - '0';
        if (right == '-') {
            T[i].right = Null;
        } else
            T[i].right = right - '0';
    }
}

bool cmp(Tree T1, Tree T2, int N1, int N2) {
    int i, j;
    bool flag2 = true;
    if (N1 != N2)
        flag2 = false;
    for (i = 0; i < N2 && flag2; i++) {
        int flag1 = 0;
        for (j = 0; j < N1; j++) {
            if (T1[j].data == T2[i].data) {
                if ((T1[T1[j].left].data == T2[T2[i].left].data && T1[T1[j].right].data == T2[T2[i].right].data) ||
                    (T1[T1[j].right].data == T2[T2[i].left].data && T1[T1[j].left].data == T2[T2[i].right].data)) {
                    flag1 = 1;
                }
                break;
            }
        }
        if (!flag1) {
            flag2 = false;
        }
    }
    return flag2;
}

int main() {
    int N1, N2;
    bool flag;
    scanf("%d", &N1);
    ReadTree(T1, N1);
    scanf("%d", &N2);
    ReadTree(T2, N2);
    if (cmp(T1, T2, N1, N2))
        printf("Yes");
    else
        printf("No");
    return 0;
}

思路

本题明确是二叉树,因此通过创建结构体来实现二叉树的构建,通过只需要满足子树的左右节点相同,位置可以不同即可。能满足则同构,不满足则不同构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广播机制-广播接收者BroadcastReceiver

在Android中&#xff0c;广播是一种在组件之间传递消息的机制&#xff0c;例如电池电量低时会发送一条提示如果要接收并过滤广播中的消息&#xff0c;则需要使用Broadcast Receiver&#xff08;广播接收者&#xff09;。广播接收者是Android四大组件之一&#xff0c;通过广播接…

dockerfile中临时拉取gitlab代码

git clone https://<name>:<token>gitlab.com/<USER>/<REPO>.git

基于STM32F103C8T6的UAV飞控板硬件设计

一、主控单元&#xff1a; 主控单元基于意法半导体公司的STM32F103C8T6单片机进行设计。STM32F103C8T6DE 内核为ARM Cortex-M3&#xff1b;最大主频&#xff1a;72MHz &#xff1b;工作电压范围&#xff1a;2V~3.6V &#xff1b;程序存储容量&#xff1a;64KB&#xff1b; 程序…

qtableview委托应用

https://download.csdn.net/download/venice0708/88485153

Python构造代理IP池提高访问量

目录 前言 一、代理IP是什么 二、代理IP池是什么 三、如何构建代理 IP 池 1. 从网上获取代理 IP 地址 2. 对 IP 地址进行筛选 3. 使用筛选出来的 IP 地址进行数据的爬取 四、总结 前言 爬虫程序是批量获取互联网上的信息的重要工具&#xff0c;在访问目标网站时需要频…

【广州华锐互动】牛顿运动定律VR虚拟教学软件

在科技日新月异的今天&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为我们带来了前所未有的沉浸式体验。在教育领域&#xff0c;VR技术的应用也日益广泛&#xff0c;尤其是在物理教学中&#xff0c;牛顿运动定律VR虚拟教学软件为学生…

预制件二维码怎么生成

在建筑施工领域&#xff0c;预制构件的使用越来越广泛&#xff0c;它能够提高工程质量和施工效率&#xff0c;减少施工现场对环境的影响。通过凡尔码的二维码管理平台&#xff0c;用户可以实现预制构件的高效管理&#xff0c;并提升施工效率和施工质量 预制件二维码怎么生成 准…

org.springframework.cloud:spring-cloud-starter-openfeign:jar is missing详解

openfeign无法导入的问题 我感觉最近带的好几个新人在搭建springCloud基础框架的时候&#xff0c;会犯一个非常小的错误&#xff0c;导致进度卡住了。 这个错误就是Feign导入的错误&#xff1a; ‘dependencies.dependency.version’ for org.springframework.cloud:spring-c…

乐鑫 SoC 内存映射入门

微控制器 (MCU) 的性能和内存能力逐步提升&#xff0c;其复杂度也随之加大。特别是当用户需要配置内存管理单元来映射外部存储器芯片 (Flash/SPIRAM) 时&#xff0c;这种现象尤其明显。 开始在乐鑫 SoC 上运行 Zephyr RTOS 时&#xff0c;会发现这些 SoC 与 ARM 架构的 MCU 相…

Java进阶(HashMap)——面试时HashMap常见问题解读 结合源码分析

前言 List、Set、HashMap作为Java中常用的集合&#xff0c;需要深入认识其原理和特性。 本篇博客介绍常见的关于Java中HashMap集合的面试问题&#xff0c;结合源码分析题目背后的知识点。 关于List的博客文章如下&#xff1a; Java进阶&#xff08;List&#xff09;——面试…

CPU架构之x86解读

一&#xff0e;什么是x86架构 X86架构&#xff1a;是微处理器执行的计算机语言指令集&#xff0c;指一个intel通用计算机系列的标准编号缩写&#xff0c;也标识一套通用的计算机指令集。 编辑搜图 二、x86架构的优势 技术成熟&#xff1a;x86架构的芯片经过多年的发展&#…

Linux:KVM虚拟化

本章操作基于centos7系统 简介 KVM是Kernel Virtual Machine的简写&#xff0c;目前Redhat只支持在64位的Rhel5.4以上的系统运行KVM&#xff0c;同时硬件需要支持VT技术。KVM的前身是QEMU&#xff0c;在2008年被redhat公司收购并获得了一项hypervisor技术&#xff0c;不过redh…

UE学习记录08----Actor 绕指定Actor旋转

Sphere 以 Cube为中心点 在水平面 即 xy平面进行旋转 来源&#xff1a; UE4 actor绕着某个actor旋转 - 简书 (jianshu.com)

【EI会议征稿】第三届绿色能源与电力系统国际学术会议(ICGEPS 2024)

第三届绿色能源与电力系统国际学术会议&#xff08;ICGEPS 2024&#xff09; 2024 3rd International Conference on Green Energy and Power Systems 绿色能源是指可以直接用于生产和生活的能源。它包括核能和“可再生能源”。随着世界各国能源需求的不断增长和环境保护意识…

启动Vue项目报错Error: error:0308010C:digital envelope routines::unsupported

问题描述 启动Vue项目报错Error: error:0308010C:digital envelope routines::unsupported 出现这个一般就是node版本的问题&#xff0c;通过命令查看node -v查看node版本&#xff1b; 百度查了好多&#xff0c;都让我降低node版本&#xff0c;属实太麻烦了 在不改node版本的…

WhatsApp是什么?如何使用?有何功能?

相信很多做跨境的小伙伴对WhatsApp并不陌生&#xff0c;现在它是数十亿人使用的最受欢迎的即时通讯平台&#xff0c;每天在该平台上交换超过100亿条消息。它在全球200个国家地区拥有超过20亿用户&#xff0c;在60个国家属于常用通讯设备&#xff0c;是世界上最受欢迎的消息传递…

【广州华锐互动】飞机诊断AR远程指导系统为工程师提供更多支持

随着科技的发展&#xff0c;飞机的维护工作也在不断进步。其中&#xff0c;AR&#xff08;增强现实&#xff09;技术的应用使得远程运维成为可能。本文将探讨AR在飞机诊断远程指导系统中的应用&#xff0c;以及它对未来航空维护模式的影响。 AR远程指导系统是一种使用增强现实技…

对接第三方接口鉴权

我们知道&#xff0c;做为一个web系统&#xff0c;少不了要调用别的系统的接口或者是提供接口供别的系统调用。从接口的使用范围也可以分为对内和对外两种&#xff0c;对内的接口主要限于一些我们内部系统的调用&#xff0c;多是通过内网进行调用&#xff0c;往往不用考虑太复杂…

虹科干货 | CAN与CAN FD总线常见故障诊断及解决

全文导读&#xff1a;CAN总线凭借着可靠、实时、经济和灵活的优势&#xff0c;在汽车、工业等领域得到广泛应用&#xff0c;并逐渐普及到电池储能、医疗器械、智能大楼等应用场景中。随着CAN总线在越来越多领域得到应用&#xff0c;CAN总线测试的需求也逐渐增多。本文主要总结了…

c++之内联函数

要学习内联函数&#xff08;inline&#xff09;&#xff0c;首先我们要复习一下宏的缺点 我们的目的就是用内联函数去替代宏。 内联函数类似与宏的优点&#xff0c;但是克服了宏的缺点。&#xff08;内联函数编译器通过宏实现了内联函数&#xff09; 但是一般只适合小函数&…