初阶数据结构二叉树练习系列(1)

这个系列的文章将带大家一起刷题,并且总结思路

温馨提示:本篇文章里的练习题仅适合刚学完二叉树的小白使用

相同的树

思路

情况分析:第一种情况:两棵树都为空                         →               返回true

                  第二种情况:一棵树为空,另一棵树不为空→               返回false

                  第三种情况: 两棵树都不为空                     →              判断每个节点的数值是否相同

源代码

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {

    if(q == NULL && p == NULL)

    return true;

    if(q == NULL || p == NULL)

    return false;

    if(p->val != q->val)

    return false;

    return isSameTree(q->left, p->left) && isSameTree(q->right, p->right);

}

变式题

思路上与第一题的一模一样,但不同的是这次需要遍历树的左右叶子,并且判断是否处在相反的位置

思路

情况分析:第一种情况:两棵树都为空                         →               返回true

                  第二种情况:一棵树为空,另一棵树不为空→               返回false

                  第三种情况: 两棵树都不为空                     →              判断每个节点的数值是否相同

源代码

bool _isSymmetric(struct TreeNode* p, struct TreeNode* q)

 {

    if(q == NULL && p == NULL)

    return true;

    if(q == NULL || p == NULL)

    return false;

    if( q->val != p->val)

    return false;

    return _isSymmetric(q->left, p->right) && _isSymmetric(q->right, p->left);

 }

bool isSymmetric(struct TreeNode* root) {

    return _isSymmetric(root->left, root->right);

}

另一棵树的子树

思路

另一棵树的子树

第二种情况: root为空时, 则没有子树可与还在等待比较的树进行比较,因此返回false

第三种情况:root不为空,则先比较根节点的值是否相等,比较完根的节点后,再比较叶子的节点的数值是否相等

源代码

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {

    if(q == NULL && p == NULL)

    return true;

    if(q == NULL || p == NULL)

    return false;

    if(p->val != q->val)

    return false;

    return isSameTree(q->left, p->left) && isSameTree(q->right, p->right);

}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){

   if(root == NULL)

    return false;

    if(root->val == subRoot->val && isSameTree(root, subRoot))

    return true;

   return isSubtree(root->left, subRoot) || isSubtree(root->right,subRoot);

}

刷题总结

从本篇文章中的三道习题以及我自己的刷题中发现,类似于这种类型的题不管考察的是否为二叉树也好还是链表也好,我们都需要考虑它是否为空以及为空时是否可取

好的,本篇文章就先带大家刷到这里,还请各位观众老爷赏个三连,谢谢啦

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

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

相关文章

【linux进程】进程地址空间(什么是进程地址空间?为什么要有进程地址空间?)

目录 一、前言 二、 程序的地址空间是真实的 --- 物理空间吗? 三、进程地址空间 🔥 操作系统是如何建立起进程与物理内存之间的联系的呢? 🔥什么是进程地址空间? 🔥为什么不能直接去访问物理内存&a…

LeetCode刷题之搜索二维矩阵

2024 7/5 一如既往的晴天,分享几张拍的照片嘿嘿,好几天没做题了,在徘徊、踌躇、踱步。蝉鸣的有些聒噪了,栀子花花苞也都掉落啦,今天给他剪了枝,接回一楼来了。ok,做题啦! 图1、宿舍…

数据结构 —— 最小生成树

数据结构 —— 最小生成树 什么是最小生成树Kruskal算法Prim算法 今天我们来看一下最小生成树: 我们之前学习的遍历算法并没有考虑权值,仅仅就是遍历结点: 今天的最小生成树要满足几个条件: 考虑权值所有结点联通权值之和最小无环…

JavaWeb开发之环境准备-大合集

本文博客地址 JavaWeb开发 || 环境准备 1. 前言2. JDK8安装2.1 下载地址2.2 安装配置图示2.2.1 JDK安装2.2.2 配置系统环境变量 3. Maven安装3.1 Maven下载3.2 Maven解压及系统变量配置 4. Tomcat安装4.1 Tomcat下载4.2 Tomcat解压及系统变量配置 5. Redis安装5.1 Redis下载5.…

六西格玛绿带培训如何告别“走过场”?落地生根

近年来,六西格玛绿带培训已经成为了众多企业提升管理水平和员工技能的重要途径。然而,不少企业在实施六西格玛绿带培训时,往往陷入形式主义的泥潭,导致培训效果大打折扣。那么,如何避免六西格玛绿带培训变成“走过场”…

Java排序算法过程详解

标题 冒泡排序选择排序插入排序(抓牌)希尔排序归并排序 ​排序算法大体可分为两种: 1、比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序&…

allure如何记录操作步骤,操作步骤不写在测试用例中,同样可以体现在allure报告,如何实现

嗨,我是兰若,今天写完用例,在运行用例并且生成报告的时候,发现报告里面没有具体的操作步骤,这可不行,如果没有具体的操作步骤的话,用例运行失败了,要怎么知道问题是出现在哪一个步骤…

【分布式数据仓库Hive】Hive的安装配置及测试

目录 一、数据库MySQL安装 1. 检查操作系统是否有MySQL安装残留 2. 删除残留的MySQL安装(使用yum) 3. 安装MySQL依赖包、客户端和服务器 4. MySQL登录账户root设置密码 5. 启动MySQL服务 6. 登录MySQL,进入数据库操作提示符 7. 授权H…

中级职称如何查询真假呢?

关于中级职称如何查询真假,大家都会有疑问,办到职称的人员肯定是想查一查手里的证书,那么没有证书的人员也想了解一下,今天甘建二告诉大家几个通俗的职称查询方式: 1.电话查询(以前办理职称是这种查询方式…

大模型备案关注点最详细说明【附流程+附件】

国家网信办已经公布的通过大模型备案的有117家,部分已面向全社会开放服务。加上业内一些渠道透漏的消息,目前已有超过140个大模型获得备案。相对于算法备案,大模型备案名额显然更难拿到,很多企业在申请大模型备案的时候是一头雾水…

qiankun实现子应用tab页签切换缓存页面

实现背景 项目中是使用的jeecg-boot低代码构建的前端开发环境,由于后期各个模块代码越来越多,打包慢,分支管理麻烦,领导要求使用微前端,每个模块拆分为子应用。 拆分子应用 由于jeecg里面自带qiankun,所…

1.1.2数据结构的三要素

一.数据结构的三要素 数据结构这门课着重关注的是数据元素之间的关系,和对这些数据元素的操作,而不关心具体的数据项内容 。 1.逻辑结构 (1)集合结构 (2)线性结构 数据元素之间是一对一的关系。除了第一个…

虚幻引擎 快速的色度抠图 Chroma Key 算法

快就完了 ColorTolerance_PxRange为容差,这里是0-255的输入,也就是px单位,直接用0-1可以更快 Key为目标颜色

[数据集][目标检测]护目镜检测数据集VOC+YOLO格式888张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):888 标注数量(xml文件个数):888 标注数量(txt文件个数):888 标注类别…

【微信小程序开发实战项目】——花店微信小程序实战项目(4)

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

10种有效提高电子设备可靠性的PCB散热技术

在现代电子领域,随着器件尺寸的不断缩小和性能的不断提高,热管理问题日益凸显,不容忽视。电子设备在运行过程中产生的热量,如果处理不当,散发不了,就会像潜移默化的威胁一样,悄无声息地危及设备…

Desktop docker 部署 WordPress

Desktop Docker 部署 WordPress 之前都是在Linux里面玩的,今天看到别人在windwos下安装docker,一时兴起装了一个试试,效果一般,很吃硬盘空间和内存。 首先在docker官方下载桌面版,安装下一步一直到完成。 安装完docker会自动加入到环境变量,而且docker-compose也会一并安…

SPLL单相软件锁相环相关源代码理解-SOGI及PI系数计算

最近在学习TI的TIDA-010062(DSP型号用的是TMS320F280049C),也就是1kW、80 Plus Titanium、GaN CCM 图腾柱无桥 PFC 和半桥 LLC(具有 LFU)参考设计。在整个框图中看到SPLL_1ph_SOGI的模块(实验4:…

软件测试面试题集(含答案)

软件测试面试题集一、Bug基本要素 缺陷ID,状态,类型,所属项目,所属模块,缺陷提交时间,缺陷提交人(检测者),严重程度,优先级别,缺陷描述信息&#…

【TS】TypeScript 联合类型详解:解锁更灵活的类型系统

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 TypeScript 联合类型详解:解锁更灵活的类型系统一、联合类型的定义二…