数据结构 二叉树 力扣例题AC——代码以及思路记录
LCR 175. 计算二叉树的深
某公司架构以二叉树形式记录,请返回该公司的层级数。

AC
int calculateDepth(struct TreeNode* root) {if (root == NULL){return 0;}else{return 1 + fmax(calculateDepth(root->left), calculateDepth(root->right));}
}
代码思路
我这里直接使用的函数,在C语言中没有max函数,只有fmax函数,在头文件<math.h>中,C++中有max函数。
使用递归,当前节点是空就返回0,告诉上一层你已经是最后一层了,上一层就可以返回1,接着就开始逐次向上传递,传递的过程中,要看传递上来的值哪边更大,因为深度是看最大的一条路径,只需要传递最大的就可以,所以直接用函数比较出来然后传递就可以。
965. 单值二叉树
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。


AC
bool isUnivalTree(struct TreeNode* root) {if(root == NULL){return true;}if(root->left && root->left->val != root->val){return false;}if(root->right && root->right->val != root->val){return false;}return isUnivalTree(root->left) && isUnivalTree(root->right);
}
代码思路
遍历一遍所有节点,但是在遍历的过程中,进行当前节点和他的左子树与右子树结点的值的比较,前提是有左子树结点和右子树结点,如果说,有左子树也有右子树结点,就需要继续向下检查,如果值不同就返回false,遍历到最底下为空返回true开始返回,返回的时候用逻辑与,这样只要有一个false最后就不是单值,反之是单值。
101. 对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。

AC
bool _isSymmetric(struct TreeNode* root1,struct TreeNode* root2) {// 都为空if(root1 == NULL && root2 == NULL){return true;}// 其中一个不为空if(root1 == NULL || root2 == NULL){return false;}// 都不为空但值不同if(root1->val != root2->val ){return false;}return _isSymmetric(root1->left, root2->right) && _isSymmetric(root1->right, root2->left);
}bool isSymmetric(struct TreeNode* root) {return _isSymmetric(root->left, root->right);
}
代码思路
检查是否对称,那就是检查子树的左子树和右子树是否对称,原函数传入root没办法递归,所以创建子函数传进去左右子树进行检查。检查对称首先检查当前节点是否相同,再检查,左子树的左子树和右子树的右子树,左子树的右子树和右子树的左子树是否相同,整体思路和检查是否是同一棵树相同,分为三种if,1.当前两颗子树均为空 2.其中一颗为空 3.都不为空但是值不同,这三种都不符合说明当前两个节点相同且还有子树,仍可以向下递归,调用递归函数。这道题要注意判断的时候,他是镜像的,是左右子树对称。
100. 相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
AC
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);
}
代码思路
整体逻辑:先比较根,不相等就返回false,相等就检查左子树和右子树
比较根的情况:都为空,则返回true;其中一个为空,左或右肯定还有子树,那肯定不一样,返回false;都不为空,但是不相等,返回false。如果以上都不是,那说明该节点相等且有子树,那就接着去检查他的子树,执行递归语句。
572. 另一棵树的子树
给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。
二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

AC
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(root->val == subRoot->val){if(isSameTree(root,subRoot)){return true;}}return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);
}
代码思路
判断子树里是否包含另一棵树,本质还是检查两棵树是否相同,但是需要找到相同树部分的根节点,也就是要先遍历子树节点,找到与subroot->val相同的值,找不到的话就直接返回false,找到后检查是否相同,相同则返回true。但是这里要思考一个情况,当前根节点的值相同,子树不相同,但是子树与subroot根节点相同,如图,当遍历到第一个4的时候,442与412不同,这时候不能直接返回false,因为他的左子树412与subroot相同,因此需要继续向下遍历并检测是否相同,因此在判断root的值是否相同后再以判断是否相同为条件,不相同继续向下遍历,直到检测到NULL。

相关文章:
数据结构 二叉树 力扣例题AC——代码以及思路记录
LCR 175. 计算二叉树的深 某公司架构以二叉树形式记录,请返回该公司的层级数。 AC int calculateDepth(struct TreeNode* root) {if (root NULL){return 0;}else{return 1 fmax(calculateDepth(root->left), calculateDepth(root->right));} } 代码思路 …...
Android 11系统启动流程
在Android 11系统启动流程中,系统启动主要经历了以下几个阶段: 引导加载程序(Bootloader)启动: 当设备加电后,首先运行的是ROM Bootloader,它负责验证操作系统映像的完整性、初始化基本硬件并加…...
python 爬取杭州小区挂牌均价
下载chrome驱动 通过chrome浏览器的 设置-帮助-关于Google Chrome 查看你所使用的Chrome版本 驱动可以从这两个地方找: 【推荐】https://storage.googleapis.com/chrome-for-testing-publichttp://npm.taobao.org/mirrors/chromedriver import zipfile import os import r…...
数据可视化-ECharts Html项目实战(3)
在之前的文章中,我们学习了如何创建堆积折线图,饼图以及较难的瀑布图并更改图标标题。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 …...
【理解机器学习算法】之Clustering算法(K-Means)
实现 K-means 聚类从零开始涉及几个关键步骤:初始化质心、将点分配给最近的质心、根据分配更新质心,以及重复这个过程直到收敛。这里是一个基本的 Python 实现: K-means 算法步骤: 初始化质心:从数据点中随机选择 k …...
Transformer的前世今生 day02(神经网络语言模型、词向量)
神经网络语言模型 使用神经网络的方法,去完成语言模型的两个问题,下图为两层感知机的神经网络语言模型: 假设词典V内有五个词:“判断”、“这个”、“词”、“的”、“词性”,且要输出P(w_next | “判断”、“这个”、…...
【Linux】多线程编程基础
💻文章目录 📄前言🌺linux线程基础线程的概念线程的优缺点线程与进程的区别 线程的创建 🌻linux线程冲突概念互斥锁函数介绍加锁的缺点 📓总结 📄前言 无论你是否为程序员,相信多线程这个词汇应…...
【地图】腾讯地图 - InfoWindow 自定义信息窗口内容时,内容 html 嵌套混乱问题
目录 需求描述问题问题代码页面展示 解决原因解决办法解决代码页面展示 代码汇总注 需求描述 腾讯地图上画点位,点击点位展示弹框信息 问题 问题代码 // 打开弹框 openInfoWindow(position, content) {this.infoWindow new TMap.InfoWindow({map: this.map,posit…...
Vue3、element-plus和Vue2、elementUI的一些转换
插槽 Vue3<template #default"scope"></template> <template #footer></template>Vue2<template slot-scope"scope"></template> <template slot"footer"></template>JS定义 Vue3 <script…...
Go语言gin框架中加载html/css/js等静态资源
Gin框架没有内置静态文件服务,但可以使用gin.Static或gin.StaticFS中间件来提供静态文件服务。 效果图如下: 一、gin 框架加载 Html 模板文件的方法 方式1:加载单个或多个html文件,需要指明具体文件名 r.LoadHTMLFiles("vie…...
#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
3 月 19 日,#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行。 现场,深圳市南山区人民政府副区长李志娜发布《2024 年南山区支持鸿蒙原生应用发展首批政策措施清单》,从加强鸿蒙原生应用供给能力、推动鸿蒙原生应用产业集聚、完善鸿蒙原生…...
flask 继续学习
group_by group_by是一种在数据库查询或数据处理中常用的操作,它用于将数据按照指定的列进行分组。通过group_by操作,可以将数据集按照某个列的值进行分类,然后对每个分类进行聚合计算或其他操作。 在SQL语言中,group_by通常与聚…...
DockerFile遇到的坑
CMD 命令的坑 dockerfile 中的 CMD 命令在docker run -it 不会执行 CMD 命令。 FROM golang WORKDIR / COPY . ./All-in-one CMD ["/bin/sh","-c","touch /kkk.txt && ls -la"] RUN echo alias ll"ls -la" > ~/.bashrc(不…...
并网型风光储微电网日前优化调度(MATLAB实现)
考虑了光伏发电、风力发电、电池储能和负荷需求等因素,与主网相连不考虑向主网售电情况。 % 微电网日前优化调度示例代码% 定义时间步长(例如,每小时) time_steps 24;% 生成模拟数据:光伏发电量,风力发电…...
MATLAB环境下基于振动信号的轴承状态监测和故障诊断
故障预测与健康管理PHM分为故障预测和健康管理与维修两部分,PHM首先借助传感器采集关键零部件的运行状态数据,如振动信号、温度图像、电流电压信号、声音信号及油液分析等,提取设备的运行监测指标,进而实现对设备关键零部件运行状…...
流畅的 Python 第二版(GPT 重译)(十二)
第五部分:元编程 第二十二章:动态属性和属性 属性的关键重要性在于,它们的存在使得将公共数据属性作为类的公共接口的一部分完全安全且确实可取。 Martelli、Ravenscroft 和 Holden,“为什么属性很重要” 在 Python 中࿰…...
【Python 48小时速成 2】关键字
文章目录 01. and :逻辑运算符,表示逻辑与操作。02. exec :内置函数,用于执行存储在字符串或文件中的 Python 代码。03. not :逻辑运算符,表示逻辑非操作。04. assert :断言语句,用于…...
小程序socket 全局代码
在微信小程序中,为了实现在整个应用范围内共享一个WebSocket连接,通常会将WebSocket的创建、打开、关闭以及消息收发等功能封装在一个全局模块中,然后在各个需要使用WebSocket功能的页面中引入并调用这个模块的方法。以下是一个简化的全局Web…...
数据挖掘|数据集成|基于Python的数据集成关键问题处理
数据挖掘|数据集成|基于Python的数据集成关键问题处理 1. 实体识别2. 数据冗余与相关性分析3. 去除重复记录4. 数据值冲突的检测与处理5. 基于Python的数据集成5.1 merge()方法5.2 Concat()方法 数据集成是把来自多个数据库或文件等不同数据源的数据整合成一致的数据存储。其中…...
Linux-网络层IP协议、链路层以太网协议解析
目录 网络层:IP协议地址管理路由选择 链路层 网络层: 网络层:负责地址管理与路由选择 — IP协议,地址管理,路由选择 IP协议 数据格式: 4位协议版本:4-ipv4协议版本 4位首部长度:以…...
Baiduwp-PHP:3分钟搭建百度网盘高速下载解析服务
Baiduwp-PHP:3分钟搭建百度网盘高速下载解析服务 【免费下载链接】baiduwp-php A tool to get the download link of the Baidu netdisk / 一个获取百度网盘分享链接下载地址的工具 项目地址: https://gitcode.com/gh_mirrors/ba/baiduwp-php 还在为百度网盘…...
毕业季自救指南:用百考通AI告别论文焦虑,高效搞定学术写作
当论文截止日期步步紧逼,你是否正在经历深夜查文献、反复修改格式、为降重焦头烂额的无助时刻?或许,你需要的不仅是一杯咖啡,更是一个懂学术、更懂你的智能伙伴。 深夜两点,图书馆的灯光依然零星亮着。电脑屏幕上闪烁的…...
Android Studio+TensorFlow Lite实战:5分钟搞定图片分类APP(附完整APK生成教程)
Android Studio与TensorFlow Lite极速开发:图片分类APP从零到APK全流程 在移动端AI应用开发领域,TensorFlow Lite以其轻量化和高性能特性成为开发者的首选。本文将带你用最短时间完成一个具备图片分类功能的Android应用,从环境配置到APK生成&…...
基于Python的社区团购管理系统毕业设计
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一套基于Python的社区团购管理系统,以解决当前社区团购业务中存在的效率低下、信息不对称、用户体验不佳等问题。具体研究目的如…...
VibePaper测了我的脑内小剧场:它偷走了我的分镜灵魂
VibePaper测了我的脑内小剧场:它在30秒里偷走了我的分镜灵魂事情是这样的—— 我对着 VibePaper 说了一句:“一个男人在梦里反复推开同一扇门,每次门后的世界都不一样。” 然后它用了不到30秒,还给我: 4个分镜图 2段动…...
保姆级教程:阿里CosyVoice2声音克隆,3秒复刻你的专属语音助手
保姆级教程:阿里CosyVoice2声音克隆,3秒复刻你的专属语音助手 1. 项目简介与核心功能 CosyVoice2-0.5B是阿里开源的一款强大的零样本语音合成系统,它能让你在短短3秒内克隆任何人的声音。想象一下,只需录制几秒钟的语音…...
BMV31M304A语音模块:I²C接口嵌入式语音播放方案
1. BMV31M304A语音播放模块深度技术解析BMV31M304A是由BEST MODULES CORP推出的专用IC接口语音播放模块,面向嵌入式系统设计,尤其适用于需要低成本、低功耗、即插即用语音提示功能的工业HMI、智能家电、安防设备及教育类开发板。该模块并非通用音频解码芯…...
软件欺诈检测中的行为分析模型
**软件欺诈检测中的行为分析模型:智能守护数字安全** 在数字化时代,软件欺诈行为日益猖獗,从虚假交易到恶意爬虫,欺诈手段层出不穷。传统的规则检测方法已难以应对复杂多变的攻击模式,而基于行为分析的模型凭借其动态…...
量化入门-用Python筛选爆量上涨的股票酒
1 实用案例 1.1 表格样式生成 本示例用于生成包含富文本样式与单元格背景色的Word表格文档。 模板内容: 渲染代码: # python-docx-template/blob/master/tests/comments.py from docxtpl import DocxTemplate, RichText # data: python-docx-template/bl…...
大学c语言搜题app有哪些 大学c语言搜题软件大全
C语言是很多学习IT技术的同学们必须要学习和精通的编程语言,想要成为高级的程序员就一定要认真学习,大学c语言搜题app有哪些就是很多想在课下对知识进行巩固,提前预习,提升能力的同学们想知道的,下面就给大家推荐几款好…...
