226.翻转二叉树 (优先掌握递归)

题目链接/文章讲解/视频讲解:翻转二叉树

交换的是指针,而不是数值,如果用数值做交换,需要交换的节点下面无法很好的操作。

使用递归来实现,但要提前清除是什么顺序的递归(前中后)

具体操作是——每一个节点的左右孩子都翻转一下指针

/*** Definition for a binary tree node.* 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) {}* };*/
class Solution {
public:void f(TreeNode* root){if(root==NULL) return;swap(root->left,root->right);if(root->left!=NULL) f(root->left);//不写返回if(root->right!=NULL) f(root->right);}TreeNode* invertTree(TreeNode* root) {//递归//参数与返回值(二叉树)、递归结束条件、每一层的执行逻辑f(root);return root;}
};

101. 对称二叉树 (优先掌握递归)

题目链接/文章讲解/视频讲解:对称二叉树

/*** Definition for a binary tree node.* 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) {}* };*/
class Solution {
public:bool f(TreeNode* a,TreeNode* b){// 先检查空指针情况if (a == nullptr && b == nullptr) return true;if (a == nullptr || b == nullptr) return false;//这个本身包含两个都为空,所以要放下面// 再检查值是否相等(现在安全了)if (a->val != b->val) return false;return f(a->left,b->right)&&f(a->right,b->left);}bool isSymmetric(TreeNode* root) {//如果翻转之后的二叉树和之前一样,则说明对//但是也有其他情况。。所以不能一味去翻转//两个子树判断是否相等(使用同样的遍历顺序)if (root == nullptr) return true;return f(root->left,root->right);}
};

深度与高度

  • 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
  • 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)
  • 使用前序求的就是深度,使用后序求的是高度。

104.二叉树的最大深度 (优先掌握递归)

题目链接/文章讲解/视频讲解: 二叉树的最大深度

最大深度是要把节点尽可能的往下面放,也就是根节点(到叶子节点)的高度

递归遍历计算其深度

/*** Definition for a binary tree node.* 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) {}* };*/
class Solution {
public:int f(TreeNode* node){//既然是算根节点到叶子节点的最长路径的结点数,也就是根节点的高度,则用后序遍历,返回最长的if(node==NULL) return 0;int ld = f(node->left);// 左int rd = f(node->right);// 右int depth = 1 + max(ld, rd); // 中return depth;}int maxDepth(TreeNode* root) {return f(root);}
};

111.二叉树的最小深度 (优先掌握递归)

和最大深度看似差不多,实则不然。

题目链接/文章讲解/视频讲解:二叉树的最小深度

/*** Definition for a binary tree node.* 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) {}* };*/
class Solution {
public:int f(TreeNode*node){if(node==NULL) return 0;int lm=f(node->left);int rm=f(node->right);if(node->left==NULL&& node->right != NULL) return 1 + rm;//if(node->right==NULL&& node->left != NULL) return 1 + lm;//int md=1+min(lm,rm);return md;}int minDepth(TreeNode* root) {//后序遍历return f(root);}
};

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

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

相关文章

DNS-Windows上使用DNS

DNS-Windows上使用DNS一、查看与修改DNS配置1.1、查看当前DNS服务器设置1.2、临时修改 DNS 服务器(命令行)二、DNS缓存相关操作2.1、查看DNS缓存内容2.2、 刷新 DNS 缓存(清除过期记录)三、测试域名解析(nslookup 工具…

3dsMax 2026 .NET Core 8 转型下的Maxscript脚本开发:动态编译模块的重构策略与兼容性升级路径

3ds Max 长期以来一直提供出色的 .NET 集成,使 Maxscript 能够无缝利用任何 .NET 库的强大功能。部分开发者在工具中广泛使用了 .NET 功能。 之前,3ds Max 依赖于 .NET Framework 4.8 并且最近更新到了 4.8.1,用于 2025 版本的发布。然而,随着 3ds Max 2026 的推出,Autod…

golang 做webrtc开发核心

在Golang中进行WebRTC开发,核心在于理解WebRTC协议的工作原理以及如何利用Go生态中的库来实现关键功能。以下是Golang WebRTC开发的核心要点: WebRTC基础概念 了解ICE(Interactive Connectivity Establishment)协议用于NAT穿越掌握…

RabbitMQ 异步化抗洪实战

说明:本文仅展示架构思路与安全片段,所有敏感字段已用占位符;不含可直接复刻的生产细节。数据与接口均为演示/虚拟。0. 背景与目标长耗时/不确定接口(如对接第三方机器人平台)的同步阻塞,容易造成请求堆积与…

接口返回 2 万条数据,easy-trans导致多了20s耗时排查过程

内网访问排版核料详情功能,用户反馈要等十几秒排查 sql:sql 比较简单排查内存计算:arthus trace 类名 方法名 总耗时2s排查页面渲染是否缓慢:F12 查看接口 等待服务器响应 20s 下载时间 30s, 故不考虑渲染问题排查请求响应日志打…

AIGC入门,手搓大模型客户端与MCP交互

概述 在现代应用开发中,将大语言模型(LLM)与专用工具服务相结合,可以构建出既能理解自然语言,又能准确执行专业任务的智能代理。本文介绍一个基于 MCP(Model Context Protocol)协议和 Ollama 本…

深度学习:从预备知识到未来展望

在当今数字化时代,深度学习正以前所未有的速度改变着我们的生活和工作方式。从智能语音助手到自动驾驶汽车,从精准医疗到个性化推荐系统,深度学习的应用无处不在。本文将从深度学习的预备知识入手,探讨其发展历程、关键技术和未来…

软考高级系统架构设计师之构件与中间件技术篇

一、构件的定义 定义1:软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖。软件构件可以被独立地部署并由第三方任意地组装。 定义2:构件是某系统中有价值的、几乎独立的并可替换的一个部分,它在良好定义的体系结构语境内满足某清晰的功能。…

Node.js 文件上传中文文件名乱码问题,为什么只有Node会有乱码问题,其他后端框架少见?

问题现象当用户上传包含中文字符的文件时,在服务器端获取到的文件名可能变成类似 ‹•–‡.txt 这样的乱码,而不是预期的中文文件名。为什么只有Node会乱码?很多后端框架(如 Java Spring Boot、Python Django、PHP Laravel&#x…

学习英语音标 (从汉语角度看英语音标发音差异)

仅供参考, 跟着教学视频看不懂时再来看以下引导 以下只写容易出错的音标 发音视频: https://www.jiwake.com/yinbiaofayin/ 音标规则单词ɜː类似汉语e, 饿~urgeə类似汉语e, 饿goɔː类似汉语o, 哦~walkɒ类似汉语o, 哦washɪ/iː/的短语, 不止发声短,舌头不用隆起itʃ类似汉…

论文笔记(九十一)GWM: Towards Scalable Gaussian World Models for Robotic Manipulation

GWM: Towards Scalable Gaussian World Models for Robotic Manipulation文章概括摘要1. 引言2. 相关工作3. 高斯世界模型(Gaussian World Model)3.1. 世界状态编码(World State Encoding)3.2. 基于扩散的动态建模(Dif…

apache phoenix sql 命令大全详解

这是一份非常详细的 Apache Phoenix SQL 命令大全和详解。Phoenix 作为 HBase 上的 SQL 层,其语法大部分与标准 SQL 兼容,但也有许多针对 HBase 的特性扩展。核心概念 在开始之前,请记住 Phoenix 的两个核心概念: 主键&#xff08…

【代码讲解】SO-ARM100 双场景演示:手柄驱动 Mujoco 仿真 + 实机控制

视频讲解: 【代码讲解】SO-ARM100 双场景演示:手柄驱动 Mujoco 仿真 实机控制今天介绍下使用使用北通手柄通过控制 Mujoco 中的 SO-ARM100 机械臂,然后将关节数据通过 zmq 通信转发控制实际机械臂。 本期中会涉及如下点,需要注意…

「数据获取」《中国教育经费统计年鉴》(1997-2024)

01、数据简介《中国教育经费统计年鉴》作为我国教育经费领域的核心统计典籍,全面系统地呈现了全国各级各类教育经费的来源构成、分配流向与使用成效。其统计范围覆盖学前教育、基础教育、中等职业教育、高等教育及特殊教育等全学段,数据维度涵盖财政性教…

使用 Logspout 收集所有容器的

1.将所有容器的输出路由到远程 rsyslog 服务器1.修改 rsyslog 配置文件/etc/rsyslog.conf, 从中找到 “# Provides UDP sysilog recepion"语句。并将该处的以下两行配置代码行首的“#”字符删除(取消注释)[roothost1 ~]# vi /etc/rsyslog.conf [roo…

【智能化解决方案】基于多目标优化检索增强生成的智能行程规划方案

📝 基于多目标优化的智能行程规划方案 1 用户需求分析与矩阵构建 1.1 核心用户信息提取 根据用户提供的年龄、出发地、目的地、出行时间等基本信息,我们首先构建一个用户特征向量: U {Age, Origin, Destination, TravelDate, Duration, Budg…

软件研发的演变

软件研发从一门手工作坊式的艺术,逐步演进为一门系统化、工程化、智能化的现代学科。其发展历程不仅体现了技术的飞跃,更反映了方法论、协作模式和思维方式的深刻变革。一、发展演变历程软件研发的演变可以大致划分为以下几个阶段:1. 软件作坊…

「日拱一码」091 机器学习——集成学习

目录 集成学习介绍 1. 核心思想 2. 为什么有效? 3. 主要流派与方法 A. 并行方法:Bagging (Bootstrap Aggregating) B. 串行方法:Boosting C. 堆叠法:Stacking 代码示例 Bagging 的代表 —— 随机森林 (Random Forest) 集成…

vscode实现第三方包的使用,cmake结合vcpkg(跨平台)

要使用cmake和vcpkg组织一个完整的现代cpp项目,一般来说需要三个文件vcpkg.json描述第三方依赖项//vcpkg.json {"dependencies": ["fmt"] }//安装,在vcpkg.json目录执行 vcpkg installCMakePresets.json定义项目的本质属性(What&…

DevExpress中Word Processing Document API学习记录

文章目录1 文档结构划分2 文档操作基础2.1 Positions and Ranges2.2 Secitions2.3 Paragraphs2.4 Tables2.5 Lists2.6 Hyperlinks and Bookmarks2.7 Comments2.8 Headers and Footers2.9 Shapes and Pictures2.10 Watermarks2.11 Charts2.12 OLE Objects2.13 ActiveX Controls2…