比特数据结构与算法(第四章_下)二叉树OJ(力扣:144,965,104,226,100,572)
144. 二叉树的前序遍历
难度简单
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:

输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:
输入:root = [ ]
输出:[ ]
示例 3:
输入:root = [1]
输出:[1]
示例 4:

输入:root = [1,2]
输出:[1,2]
示例 5:

输入:root = [1,null,2]
输出:[1,2]
提示:
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* preorderTraversal(struct TreeNode* root, int* returnSize){}解析代码:
ps(迭代算法我们要学了C++之后的高阶数据结构再实现)
int TreeSize(struct TreeNode* root)
{if(root==NULL){return 0;}return 1 + TreeSize(root->left) + TreeSize(root->right);
}void _preorderTraversal(struct TreeNode* root,int* array,int* pi) // (函数前面的_代表这个函数的子函数)
{if(root==NULL){return;}array[(*pi)++] = root->val;_preorderTraversal(root->left,array,pi);_preorderTraversal(root->right,array,pi);
}int* preorderTraversal(struct TreeNode* root, int* returnSize){int size = TreeSize(root);int* array=(int*)malloc(sizeof(int)*size);int i = 0;_preorderTraversal(root,array,&i);*returnSize=size;return array;
}(写完这题可以去写写二叉树的中序遍历和后序遍历,都是一样的)链接:
94. 二叉树的中序遍历
965. 单值二叉树
难度简单
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。
示例 1:

输入:[1,1,1,1,1,null,1]
输出:true
示例 2:

输入:[2,2,2,5,2]
输出:false
提示:
给定树的节点数范围是 [1, 100]。
每个节点的值都是整数,范围为 [0, 99] 。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/bool isUnivalTree(struct TreeNode* root){}解析代码:
bool isUnivalTree(struct TreeNode* root) {if (root == NULL){return true;}if (root->left && root->val != root->left->val){return false;}if (root->right && root->val != root->right->val){return false;}return isUnivalTree(root->left) && isUnivalTree(root->right);
}104. 二叉树的最大深度
难度简单
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/int maxDepth(struct TreeNode* root){}解析代码:
/*int maxDepth(struct TreeNode* root) {if (root == NULL){return 0;}return maxDepth(root->left) > maxDepth(root->right) ? maxDepth(root->left) + 1 : maxDepth(root->right) + 1;
}*/ //这样写会有重复的递归计算, 优化:
int maxDepth(struct TreeNode* root) {if (root == NULL){return 0;}int leftDepth = maxDepth(root->left);int rightDepth = maxDepth(root->right);return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}226. 翻转二叉树
难度简单
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
示例 2:

输入:root = [2,1,3]
输出:[2,3,1]
示例 3:
输入:root = []
输出:[]
提示:
树中节点数目范围在 [0, 100] 内
-100 <= Node.val <= 100
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/struct TreeNode* invertTree(struct TreeNode* root){}解析代码(法一):
struct TreeNode* invertTree(struct TreeNode* root) {if (root == NULL){return NULL;}struct TreeNode* tmp = root->left;root->left = root->right;root->right = tmp;invertTree(root->left);invertTree(root->right);return root;
}解析代码(法二):
struct TreeNode* invertTree(struct TreeNode* root) {if (root == NULL){return NULL;}struct TreeNode* rightTmp = root->right;root->right = invertTree(root->left);root->left = invertTree(rightTmp);return root;
}100. 相同的树
难度简单
给你两棵二叉树的根节点 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
提示:
两棵树上的节点数目都在范围 [0, 100] 内
-10^4 <= Node.val <= 10*4
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/bool isSameTree(struct TreeNode* p, struct TreeNode* q){}解析代码:
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {if (p == NULL && q == NULL){return true;}if (p == NULL || q == NULL)//其中一个为空,另一个不为空{return false;}if (p->val != q->val){return false;}return isSameTree(p->left, q->left)&& isSameTree(p->right, q->right);
}572. 另一棵树的子树
难度简单
给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。
二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。
示例 1:

输入:root = [3,4,5,1,2], subRoot = [4,1,2]
输出:true
示例 2:

输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
输出:false
提示:
root 树上的节点数量范围是 [1, 2000]
subRoot 树上的节点数量范围是 [1, 1000]
-10^4 <= root.val <= 10^4
-10^4 <= subRoot.val <= 10^4
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {}解析代码:
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{if (p == NULL && q == NULL){return true;}if (p == NULL || q == NULL)//其中一个为空,另一个不为空{return false;}if (p->val != q->val){return false;}return isSameTree(p->left, q->left)&& isSameTree(p->right, q->right);
}bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {if (root == NULL){return false;}if (isSameTree(root, subRoot)){return true;}//不一样就递归遍历这棵树return isSubtree(root->left, subRoot)|| isSubtree(root->right, subRoot);//只要有一个root返回true就行
}
相关文章:
比特数据结构与算法(第四章_下)二叉树OJ(力扣:144,965,104,226,100,572)
144. 二叉树的前序遍历难度简单给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root [1,null,2,3]输出:[1,2,3]示例 2:输入:root [ ]输出:[ ]示例 3:输入&#…...
【C++】inline 内联函数
文章目录📕 概念📕 使用前的准备📕 使用📕 特性📕 概念 在 C 中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了 inline 修饰符,表…...
如何审计一个智能合约
智能合约审计用于整个 DeFi 生态系统,通过对协议代码的深入审查,可以帮助解决识别错误、低效代码以及这些问题。智能合约具有不可篡改的特点,这使得审计成为任何区块链项目安全流程的关键部分。 代码审计对任何应用程序都很重要,…...
不用PS,也能实现抠图的工具
对于非设计专业的同学来说,专门下载 PS 抠图有点大材小用,而且运用 PS 对电脑配置一定要求。不过现在有了更多选择,市面上出现了越来越多的抠图软件,不过越多的抠图软件选择也意味着需要花费时间试错因此本文将给大家推荐 3 款非常…...
集群化存储的概述
集群化存储的概述 1、存储的分类方式: 存储的分类-网络拓扑 用于存储的网络拓扑 NAS:小米路由器;SAN:存储区网络–>网络网和存储网络区分开DAS:常见的存储;本地存储 存储分类-存储技术网络拓扑存储技…...
asyncio 并发编程(一)
Python2 时代高性能的网络编程主要是 Twisted、Tornado 和 Gevent 这三个库,但是它们的异步代码相互之间既不兼容也不能移植。Gvanrossum 希望在 Python 3 实现一个原生的基于生成器的协程库,其中直接内置了对异步 IO 的支持,这就是 asyncio&…...
春招冲刺(二):BFC 盒子面试题总结
BFC 盒子面试题总结 Q1:BFC盒子是什么? BFC全称是Block Formatting Context 意思就是块级格式化上下文。 可以把BFC看做一个容器,容器里边的元素不会影响到容器外部的元素。 Q2:如何创建BFC? 根元素:bo…...
Ep_计网面试题-本地IP地址怎么一层层向上转换?
将数据加上报头打包在一起形成新的数据包继续往下一层传递。拆包的时候就是把数据包去掉包头作为新数据传给上一层 视频讲解: https://edu.csdn.net/course/detail/38090 点我进入 面试宝典 很多人不知道面试问什么,或者其他的XXGuide,那里边的太多没用的,也没有源码解析,都…...
MySQL高级三
目录 三、MySQL高级03 3.1 MyCat 3.1.1 MyCat简介 3.1.2 中间件的作用 3.2 安装MyCat 3.3 主从复制 3.3.1 主从复制的原理 3.3.2 主从复制的好处 3.3.3 配置主从复制 三、MySQL高级03 如果虚拟机的磁盘已满,可以对磁盘进行重新分配 参考:虚拟…...
set和map的基本使用
目录 关联式容器 要点分析 键值对 pair介绍 set 模板参数列表: set的构造: 常用接口 操作 multiset map map的构造 插入 make_pair map的迭代器 operator[] multimap multimap中为什么没有重载operator[] 关联式容器 关联式容器也是用…...
已解决pip install wxPython模块安装失败
已解决(pip install wxPython安装失败)error: legacy-instal1-failure Encountered error while trying to install package.wxPython note: This is an issue with the package mentioned above,not pip. hint : See above for output from …...
Linux基础——连接Xshell7
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...
C++——智能指针1
目录 RAII auto_ptr模拟实现 智能指针拷贝问题 唯一指针 shared_ptr(可以拷贝) shared_ptr模拟实现 完整代码 循环引用 weak_ptr模拟实现 定制删除器 shared_ptr定制删除器模拟实现 内存泄漏 RAII RAII(Resource Acquisit…...
[数据集][VOC][目标检测]翻越栏杆翻越防护栏数据集目标检测可用yolo训练-1035张介绍
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1035 标注数量(xml文件个数):1035 标注类别数:2 标注类别名称:["fylg","…...
深度学习 | BN层原理浅谈
深度学习 | BN层原理浅谈 文章目录深度学习 | BN层原理浅谈一. 背景二. BN层作用三. 计算原理四. 注意事项为什么BN层一般用在线性层和卷积层的后面,而不是放在激活函数后为什么BN能抑制过拟合(有争议)一. 背景 神经网络在训练时,由于内存限制࿰…...
每日面试题
2022/12/15 如何实现一个IOC容器 1、配置文件配置包扫描路径 2、递归包扫描获取.class文件 3、反射、确定需要交给lOC管理的类4、对需要注入的类进行依赖注入 配置文件中指定需要扫描的包路径 定义一些注解,分别表示访问控制层、业务服务层、数据持久层、依赖注…...
将IDEA的项目托管到gitee
目录1. 在gitee上创建仓库2. 本地创建仓库目录3. 将项目添加到缓冲区4. 将缓冲区的项目添加到本地仓库5. 将本地仓库的项目上传到gitee6. 遇到的问题6.1 问题描述6.2 解决方法7. 相关图示与补充8. 相关参考1. 在gitee上创建仓库 2. 本地创建仓库目录 在IDEA中选择创建 Git 仓…...
父类子类静态代码块、构造代码块、构造方法执行顺序
github:https://github.com/nocoders/java-everything.git 名词解释 静态代码块:java中使用static关键字修饰的代码块,每个代码块只会执行一次,JVM加载类时会执行静态代码块中的代码,静态代码块先于主方法执行。构造代码块&#…...
【C++】开散列实现unordered_map与unordered_set的封装
本文主要介绍unordered_map与unordered_set的封装,此次封装主要用上文所说到的开散列,通过开散列的一些改造来实现unordered_map与unordered_set的封装 文章目录一、模板参数二、string的特化三、正向迭代器四、构造与析构五、[]的实现六、unordered_map的实现七、u…...
华为OD机试真题Python实现【删除指定目录】真题+解题思路+代码(20222023)
删除指定目录 题目 某文件系统中有 N 个目录, 每个目录都一个独一无二的 ID。 每个目录只有一个付目录, 但每个目录下可以有零个或多个子目录, 目录结构呈树状结构。 假设 根目录的 ID 为0,且根目录没有父目录 ID 用唯一的正整数表示,并统一编号 现给定目录 ID 和其付目…...
别再让专业名词难倒你的语音模型:SenseVoice/Paraformer微调实战避坑指南
语音模型专业术语识别优化实战:从数据清洗到模型评估的全流程解析 医疗报告中的"肌钙蛋白"被识别成"鸡蛋白",金融对话里的"量化宽松"变成"量化宽松裤"——专业术语识别一直是语音模型的阿喀琉斯之踵。本文将手把…...
GLM-OCR在办公场景中的应用:快速提取图片文字,提升工作效率
GLM-OCR在办公场景中的应用:快速提取图片文字,提升工作效率 1. 办公场景中的文字识别痛点 在日常办公中,我们经常需要处理各种包含文字的图片文件:会议白板照片、扫描的合同文档、手机拍摄的名片、PDF转存的图片等。传统处理方式…...
.NET Reactor 7.3.0.0:跨平台代码保护的新里程碑
1. 跨平台开发者的新武器:.NET Reactor 7.3.0.0 如果你正在用.NET开发跨平台应用,肯定遇到过这样的烦恼:好不容易写完的代码,一发布就被反编译得干干净净。我去年有个项目就因为没做好保护,核心算法被人轻松破解&#…...
面向高性能信号发生器的功率MOSFET选型分析——以精密输出级与高效电源管理为例
【面向高性能信号发生器的功率MOSFET选型分析——以精密输出级与高效电源管理为例】在测试测量、通信研发与科学实验领域,信号发生器作为产生精确、稳定、可编程电信号的核心仪器,其输出信号的纯度、幅度精度、切换速度及长期稳定性直接决定了测试系统的…...
【AI合规福利】2026全国18地大模型+算法备案补贴全汇总(附官方链接+申报避坑)
对于AI企业而言,大模型、算法备案是合规运营的必经之路,但备案过程中人力、审核等成本较高。好消息是,全国多省市已出台真金白银的备案补贴政策,最高单次补贴100万元,部分地区免申即享!本文整理2026年最新1…...
Ghidra vs IDA:逆向工具对比与Java脚本开发指南
Ghidra vs IDA:逆向工程双雄的深度对比与Java脚本开发实战 逆向工程领域的两大标杆工具——Ghidra与IDA Pro,长期占据着安全研究人员的工具箱。本文将深入剖析两者的设计哲学差异,并通过实际案例展示如何利用Ghidra的Java脚本扩展能力构建自动…...
Llama-3.2V-11B-cot镜像免配置部署:开箱即用的11B视觉语言模型
Llama-3.2V-11B-cot镜像免配置部署:开箱即用的11B视觉语言模型 1. 项目概述 Llama-3.2V-11B-cot是一个强大的视觉语言模型,它能够同时理解图像内容并进行系统性推理。这个模型基于Meta的Llama 3.2 Vision架构,特别适合需要结合视觉理解和逻…...
Obsidian Sample Plugin 多平台兼容性:桌面与移动端适配完整指南
Obsidian Sample Plugin 多平台兼容性:桌面与移动端适配完整指南 【免费下载链接】obsidian-sample-plugin 项目地址: https://gitcode.com/GitHub_Trending/ob/obsidian-sample-plugin Obsidian Sample Plugin 作为一款实用的 Obsidian 插件,其…...
ESP32驱动BLE112模块的BGAPI通信实践指南
1. 项目概述 BLE112 是 Silicon Labs(现为 Skyworks)于 2012 年推出的首款基于 Bluegiga BGScript/BGAPI 架构的独立式蓝牙低功耗(BLE)模块。该模块采用 CC2540 兼容射频前端 专用 BLE 协议栈固件(BGStack v1.x&…...
计算机毕业设计springboot校园招聘推荐系统 基于SpringBoot的高校毕业生智能就业推荐平台设计与实现 SpringBoot框架下大学生求职信息精准匹配系统开发
计算机毕业设计springboot校园招聘推荐系统26a319 (配套有源码 程序 mysql数据库 论文)本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。二十一世纪以来,信息技术与网络科技的飞速发展深刻重塑了社会各领域…...
