C-DS二叉树_另一棵树的子树

Description

给你两棵二叉树tree1和tree2,检验tree1中是否包含和tree2具有相同结构和结点值的子树。如果存在,输出true;否则,输出false。

    

Input

第一行输入t,表示有t个测试样例。

第二行首先输入n1,接着输入n1个整数,表示二叉树tree1。

第三行首先输入n2,接着输入n2个整数,表示二叉树tree2。

以此类推,每两行输入一个测试样例,共输入t个测试样例。

数组形式的二叉树表示方法与题目:DS二叉树_伪层序遍历构建二叉树 相同,输入-1表示空结点。

Output

每一行输出当前测试样例是否符合题意。

共输出t行。

思路分析:

方法一:深度优先搜索暴力匹配

算法实现:

bool SameTree(BitNode* s, BitNode* t) {//如果根节点都为空,匹配成功,返回trueif (s == nullptr && t == nullptr) return true;、//两者之中有一个为空,匹配不成功,返回falseif (s == nullptr || t == nullptr) return false;//三者都相等才是相等的树,必须满足1.根节点值相等; 2.左子树相等 3.右子树相等return s->data == t->data && SameTree(s->lc, t->lc) && SameTree(s->rc, t->rc);
}bool isSubtree(BitNode* s, BitNode* t) {if (!s) return false;//如果 目标树是子树的左子树,或者是右子树,或者两者相等,那么目标树则为主树的子树return isSubtree(s->lc, t) || SameTree(s, t) || isSubtree(s->rc, t);
}

 实现代码:

#include<iostream>
#include<queue>
using namespace std;class BitNode {//friend bool isSubtree();//friend bool SameTree();
public:int data;BitNode* lc;BitNode* rc;BitNode() :lc(NULL), rc(NULL) {};BitNode(char e) :data(e), lc(NULL), rc(NULL) {};~BitNode() {delete lc;delete rc;}friend class BinaryTree;
};class BinaryTree {
private:BitNode* root;//头节点void CreateTree(BitNode*& t, int n, int arr[]);int* arr = new int[1000];
public:BinaryTree() :root(NULL) {}~BinaryTree() { delete root; };void CreatTree(int n, int arr[]);BitNode* getRoot() {return root;}
};void BinaryTree::CreateTree(BitNode*& t, int n, int arr[]) {//伪层序遍历构建二叉树t = new BitNode;queue <BitNode*> T;if (arr[0] != -1) {t->data = arr[0];T.push(t);}else {return;}int count = 1;while (count < n && !T.empty()) {BitNode* node = T.front();T.pop();if (arr[count] != -1) {node->lc = new BitNode(arr[count]);T.push(node->lc);}count++;if (count < n && arr[count] != -1) {node->rc = new BitNode(arr[count]);T.push(node->rc);}count++;}
}
void BinaryTree::CreatTree(int n, int arr[]) {CreateTree(root, n, arr);
}bool SameTree(BitNode* s, BitNode* t) {//如果根节点都为空,匹配成功,返回trueif (s == nullptr && t == nullptr) return true; //两者之中有一个为空,匹配不成功,返回falseif (s == nullptr || t == nullptr) return false;//三者都相等才是相等的树,必须满足1.根节点值相等; 2.左子树相等 3.右子树相等return s->data == t->data && SameTree(s->lc, t->lc) && SameTree(s->rc, t->rc);
}bool isSubtree(BitNode* s, BitNode* t) {if (!s) return false;//如果 目标树是子树的左子树,或者是右子树,或者两者相等,那么目标树则为主树的子树return isSubtree(s->lc, t) || SameTree(s, t) || isSubtree(s->rc, t);
//请不要直接复制粘贴
}int main()
{int t;cin >> t;while (t--){int n1;int n2;cin >> n1;int* arr1 = new int[n1 + 1];for (int i = 0; i < n1; i++) {cin >> arr1[i];}cin >> n2;int* arr2 = new int[n2 + 1];for (int i = 0; i < n2; i++) {cin >> arr2[i];}BinaryTree* tree1 = new BinaryTree;tree1->CreatTree(n1, arr1);BinaryTree* tree2 = new BinaryTree;tree2->CreatTree(n2, arr2);if (isSubtree(tree1->getRoot(), tree2->getRoot())) {cout << "true" << endl;}else {cout << "false" << endl;};}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPS表格无法粘贴信息,原因是复制区域与粘贴区域形状不同

WPS表格无法粘贴信息&#xff0c;原因是复制区域与粘贴区域形状不同 问题描述 我是选中了一整列&#xff0c;复制&#xff0c;但是无法粘贴到另一个EXCEL表格中 原因 首先我的数据量很大&#xff0c;有20万行&#xff0c;然后需要复制的EXCEL是.xls格式的&#xff0c;.xls格…

【UART】UART QA

UART常见知识点整理 定义&#xff1a;Universal Asynchronous Receiver/Transmitter - 通用异步收发传输器。 特点&#xff1a;速率不快、可全双工、结构上一般由波特率产生器、UART发送器、UART接收器组成&#xff0c;硬件2-3线。 线&#xff1a;RXD&#xff0c;TXD&#xff0…

SonarQube的使用心得

一、使用背景&#xff1a; SonarQube 是一个用于代码质量管理的开源平台&#xff0c;用于管理源代码的质量。 通过插件形式&#xff0c;可以支持包括 java, C#, C/C, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。 Sonar可以从以下七个维度…

LSTM缓解梯度消失问题

关于LSTM https://easyai.tech/ai-definition/lstm/ https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21 为何LSTM缓解梯度消失问题 为什么LSTM会减缓梯度消失&#xff1f; - 知乎 LSTM引入长短期记忆&#xf…

【STL】:list的模拟实现

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关list的模拟实现&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据…

【Linux】编译安装nginx,手写service配置文件,深度理解systemd控制管理服务底层原理

目录 一、了解服务 1、服务的本质 2、centos7的systemd的服务 3、service unit file配置文件的组成以及掌握常用选项 4、关于systemd管理的命令学习 5、运行级别 二、编译安装nginx&#xff0c;以及手写service配置文件&#xff0c;请看注释 ​编辑 一、了解服务 1、服…

【C语言】函数的系统化精讲(二)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 &#x1f308;作者寄语 &#x1f308;&#xff1a; 小菜鸟的力量不在于它的体型&#xff0c;而在于它内心的勇气和无限的潜能&#xff0c;只要你有决心&#xff0c;就没有什么事情是不可能的…

AI系统ChatGPT程序源码+AI绘画系统源码+支持GPT4.0+Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

【计算机网络】数据链路层-MAC和ARP协议

文章目录 1. 认识以太网2. MAC协议MAC帧的格式MAC地址和IP地址的区别MTU 3. 局域网通信原理碰撞检测和避免 4. ARP协议ARP数据报的格式ARP缓存 1. 认识以太网 网络层解决的是跨网络点到点传输的问题&#xff0c;数据链路层解决的是同一网络中的通信。 数据链路层负责在同一局域…

SpringBoot + Vue2项目打包部署到服务器后,使用Nginx配置SSL证书,配置访问HTTP协议转HTTPS协议

配置nginx.conf文件&#xff0c;这个文件一般在/etc/nginx/...中&#xff0c;由于每个人的体质不一样&#xff0c;也有可能在别的路径里&#xff0c;自己找找... # 配置工作进程的最大连接数 events {worker_connections 1024; }# 配置HTTP服务 http {# 导入mime.types配置文件…

聚观早报 |小鹏P7i 550版上市;零一万物发布大模型

【聚观365】11月7日消息 小鹏P7i 550版上市 零一万物发布大模型 vivo X100现身Geekbench 小马智行与丰田联合发布Robotaxi 王云鹏出任百度IDG负责人 小鹏P7i 550版上市 小鹏P7i 550版正式上市&#xff0c;新车共推出550 Pro、550 Max 两款新版型&#xff0c;售价分别为22…

WPF中的Binding的常见知识点与技巧

完全来源于十月的寒流&#xff0c;感谢大佬讲解 在XAML中&#xff0c;可以绑定到许多不同类型的数据源和属性。以下是一些可以绑定的常见数据源和属性&#xff1a; 属性&#xff1a;可以绑定到对象的属性&#xff0c;例如控件的Text、Visibility、IsEnabled等属性。 集合&am…

民宿酒店服务预约小程序的作用

民宿往往是旅游者们前往某个城市感受风情常住的地方&#xff0c;也因此在景区或特定地方&#xff0c;总是不乏大小民宿品牌&#xff0c;但除了市场高需求外&#xff0c;商家们所遇的痛点也不少&#xff1a; 1、获客引流难 民宿生意虽然需求量高&#xff0c;但各家品牌众多&am…

微服务架构——笔记(3)Eureka

微服务架构——笔记&#xff08;3&#xff09; 基于分布式的微服务架构 本次笔记为 此次项目的记录&#xff0c;便于整理思路&#xff0c;仅供参考&#xff0c;笔者也将会让程序更加完善 内容包括&#xff1a;1.支付模块、2.消费者订单模块、支付微服务入驻Eureka、Eureka集群…

Docker 多阶段构建的原理及构建过程展示

Docker多阶段构建是一个优秀的技术&#xff0c;可以显著减少 Docker 镜像的大小&#xff0c;从而加快镜像的构建速度&#xff0c;并减少镜像的传输时间和存储空间。本文将详细介绍 Docker 多阶段构建的原理、用途以及示例。 Docker 多阶段构建的原理 在传统的 Docker 镜像构建…

Hive 解析 JSON 字符串数据的实现方式

文章目录 通过方法解析现实示例 通过序列化实现示例 通过方法解析现实 在 Hive 中提供了直接解析 JSON 字符串数据的方法 get_json_object(json_txt, path)&#xff0c;该方法参数解析如下&#xff1a; json_txt&#xff1a;顾名思义&#xff0c;就是 JSON 字符串&#xff1b;…

vue3项目搭建

一&#xff1a;介绍 Vue3 是从2018年开始研发&#xff0c;经过大概一年半的不断重构与试运行&#xff0c;最终发布于2020年9月18日。相比于 Vue2 其具有更小&#xff0c;更快&#xff0c;支持性更高等功能。因此学号 Vue3 是非常有必要的&#xff0c;同时 Vue2 也将会与2023年1…

JAVA前端开发介绍

以一个网站为例包括网站设计、前端开发、程序开发等。网站设计就是网站的外观&#xff0c;平面的东西。程序开发也好理解就是功能实现。而前端开发&#xff0c;简单来说&#xff0c;就是把平面效果图转换成网页&#xff0c;把静态转换成动态。它的工作包括了:切图、写样式、做鼠…

Java根据一个List内Object的两个字段去重

背景 在Java开发过程中&#xff0c;我们经常会遇到需要对List进行去重的需求。 其中常见的情况是&#xff0c;将数组去重&#xff0c;或者将对象依据某个字段去重。这两种方式均可用set属性进行处理。 今天讨论&#xff0c;有一个List&#xff0c;且其中的元素是自定义的对象&…

【JVM】JDBC案例打破双亲委派机制

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JVM 打破双亲委派机制&#xff08;JDBC案例…