相同的树(C++解法)

题目

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true

示例 2:

输入:p = [1,2], q = [1,null,2]
输出:false

示例 3:

输入:p = [1,2,1], q = [1,1,2]
输出:false

C++代码

#include <iostream>
using namespace std;

//定义二叉树结构体
struct TreeNode {
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode() : val(0), left(nullptr), right(nullptr) {}
	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
	TreeNode(int x, TreeNode* left, TreeNode* right): val(x), left(left), right(right) {}
};

/*
* 相同的树问题
* 分四种情况,如果两棵树都为空,则返回true
* 如果只有一棵树为空,返回false
* 如果两棵树的根节点值不同,返回false
* 如果两棵树不为空且值相同,迭代判断左右子树是否相同
*/
bool isSameTree(TreeNode* p, TreeNode* q) {
	if (q == nullptr && q == nullptr) {
		return true;
	}
	else if (q == nullptr || q == nullptr) {
		return false;
	}
	else if (q->val != q->val) {
		return false;
	}
	else {
		return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
	}
}

int main() {
	TreeNode* p1 = new TreeNode(1);
	TreeNode* p2 = new TreeNode(2);
	TreeNode* p3 = new TreeNode(3);
	TreeNode* q1 = new TreeNode(1);
	TreeNode* q2 = new TreeNode(2);
	TreeNode* q3 = new TreeNode(3);
	p1->left = p2;
	p1->right = p3;
	p2->left = nullptr;
	p2->right = nullptr;
	p3->left = nullptr;
	p3->right = nullptr;
	
	q1->left = q2;
	q1->right = q3;
	q2->left = nullptr;
	q2->right = nullptr;
	q3->left = nullptr;
	q3->right = nullptr;

	TreeNode* p = p1;
	TreeNode* q = q1;
	bool ans = isSameTree(p, q);
	cout << boolalpha << ans << endl;

	delete p1, p2, p3, q1, q2, q3;
	return 0;
}

分析

相同的树问题,分四种情况,如果两棵树都为空,则返回 true,如果只有一棵树为空,返回 false,如果两棵树的根节点值不同,返回 false,如果两棵树不为空且值相同,迭代判断左右子树是否相同。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

结构体内存对齐(三板斧解决结构体的大小)

文章目录 前言一、结构体对齐规则二、结构体大小计算 - 三板斧一板斧二板斧三板斧 三、为什么存在内存对齐&#xff1f;四、修改默认对齐数 前言 我们知道&#xff0c;整型变量有自己的大小&#xff0c;浮点型变量有自己的大小&#xff0c;数组也有自己的大小&#xff0c;只要…

linux下搭建gperftools工具分析程序瓶颈

1. 先安装 unwind //使用root wget https://github.com/libunwind/libunwind/archive/v0.99.tar.gz tar -xvf v0.99.tar.gz cd libunwind-0.99 autoreconf --force -v --install ./configure make sudo make install2. 安装gperftools wget https://github.com/gp…

操作系统第一次实验——短作业优先调度算法(SJF)

一、实验目的&#xff1a; 目的&#xff1a;了解并掌握作业调度的功能&#xff0c;熟悉并掌握各种作业调度算法。 任务&#xff1a;模拟实现先来先服务或者短作业优先调度算法。 二、实验内容&#xff1a; 1、实验内容 模拟实现SJF调度。 设置作业体&#xff1a;作业名&#x…

关于mac下pycharm旧版本没删除的情况下新版本2023安装之后闪退

先说结论&#xff0c;我用的app cleaner 重新删除的pycharm &#xff0c;再重新安装即可。在此记录一下 之前安装的旧版的2020的pycharm&#xff0c;因为装不了新的插件&#xff0c;没办法就升级了。新装2023打开之后闪退&#xff0c;重启系统也不行&#xff0c;怀疑是一起破解…

类图复习:类图简单介绍

入职新公司在看新项目的代码&#xff0c;所以借助类图梳理各个类之间的关系&#xff0c;奈何知识已经还给了老师&#xff0c;不得不重新学习下类图的相关知识&#xff0c;此处将相关内容记录下方便后续使用。 文章目录 类图语法类与类的关系画类图 类图语法 语法描述public-pr…

C语言--typedef的使用

前言 在C语言中使用结构体时必须加上struct这个关键字,那有没有办法省略这个呢?要想达到这个目的就 需要用到关键字typedef,顾名思义”类型定义”。 typedef 数据类型 新的别名; 它是用来操作数据类型。其主要作用有两个: 1.给一个较长较复杂的类型取一个简单的别名。 2.给类…

MySQL其他集群类型介绍

常用的/常见的Mysql集群方案 1.MySQL Replication2.MySQL Fabric3.MySQL NDB Cluster4.MGR&#xff08;MySQL Group Replication&#xff09;5.心跳检测SAN共享存储&#xff08;heartbeat SAN&#xff09;6.心跳检测DRBD磁盘复制&#xff08;heartbeat DRBD&#xff09;7.MMM…

大桌子想传大文件

受高手指导说服务器想传大点的文件&#xff0c;得把两个地方改改 先是这里 然后这里也要改 哦。对了&#xff0c;改完之后要重启服务器。别忘了。

网络爬虫代理ip有什么好处?爬虫工作使用代理IP有哪些优势?

在爬虫工作中&#xff0c;使用代理IP有很多好处&#xff0c;可以帮助爬虫程序更加高效地完成任务。以下是使用代理IP的几个优势&#xff1a; 1. 增加匿名性 使用代理IP可以隐藏爬虫程序的真正IP地址&#xff0c;增加匿名性&#xff0c;避免被目标网站封禁。通过代理IP&#xff…

【ElasticSearch系列-07】ES的开发场景和索引分片的设置及优化

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…

高德地图 web js端 出现 INVALID_USER_SCODE 10008 MD5安全码未通过验证

图片意思就是在引入 高德js和css 链接前 引入 <script type"text/javascript">window._AMapSecurityConfig {securityJsCode:您申请的安全密钥,} </script> 到这里就完美结束了

【JavaEE初阶】 TCP三次握手四次挥手(超详细版)

文章目录 &#x1f334;三次握手四次挥手总览&#x1f6eb;三次握手&#xff08;建立连接&#xff09;&#x1f6a9;为什么要三次握手&#x1f4cc;解决彼此双发彼此认同的问题&#x1f4cc;验证双方的接听发送能力是否正常 &#x1f6a9;建立连接阶段涉及到的两个重要状态: &a…

blender动画制作软件拓扑全流程

拓扑在三维动画制作中至关重要&#xff0c;原因如下&#xff1a; 1. 动画变形&#xff1a; 自然形变&#xff1a; 良好的拓扑结构能够支持角色或物体在动画中的自然形变&#xff0c;例如关节弯曲、肌肉收缩等。流畅运动&#xff1a; 适当的拓扑有助于保持模型表面的平滑性&…

Linux友人帐之网络编程基础FTP服务器

一、概述 1.1FTP基本概念 FTP&#xff08;File Transfer Protocol&#xff09;是一种用于文件传输的标准协议。FTP服务是一种能够让用户通过FTP协议在本地计算机和远程服务器之间进行文件传输的服务。FTP服务可以允许用户上传或下载文件&#xff0c;也可以进行目录浏览、文件删…

Windows安装Docker(无网)

Windows安装Docker&#xff08;无网&#xff09; window无网安装Docker 1. 开启虚拟化功能 1. 开启window的虚拟化功能 方式一&#xff1a;直接在window的搜索框搜索 “启用或关闭windows功能”&#xff0c;就可以快捷进入【启用或关闭windows功能】页面 方式二&#xff1…

【MySQL】想不想知道数据库到底是啥?想了就进来看看

数据库是什么 前言正式开始连接mysql理解mysql第一层理解第二层理解第三层理解 小问题见见猪跑show databases;create database xxx;create table xxx; 主流数据库mysql架构SQL语句的种类存储引擎 前言 你手上有没有MySQL&#xff1f;有了最好&#xff0c;没有的话建议下一个&…

2022美亚杯团队赛

2022美亚杯团体赛 - XDforensics-Wiki 2022 美亚杯 团体赛AGC部分资格赛服务器部分 所有服务器部分解题思路_2022美亚杯团体赛复盘-CSDN博客 目录 AGC 1 2 Media Sever挂载 3 ssh登入的看法 PTS 4 5 ssh日志 6 7 查看docker列表 8 查看docker运行 9 建立网站…

solidworks对电脑要求高吗?2023solidworks配置要求

solidworks对电脑要求高吗&#xff1f;SolidWorks是一款功能强大的三维CAD软件&#xff0c;对电脑配置有一定的要求。一般来说&#xff0c;运行SolidWorks需要的电脑配置包括较高的处理器性能、足够的内存和存储空间&#xff0c;以及一块性能良好的显卡。此外&#xff0c;对于大…

Leetcode_3:无重复字符的最长子串

题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2: 输入: s "bbbbb"…

记一次上位机软件线程泄露的分析及解决

上位机软件在客户现场隔一段时间说操作了没反应&#xff0c;但是上位机又没死&#xff0c;出现了一些奇怪现象&#xff1a; 左上角的时间不走了&#xff08;本来是1s运行一次&#xff09;使用任务管理器查看&#xff0c;内存占用1.5G,线程有3000多个&#xff0c;正常情况下&am…