笔记84:关于递归法的一些感悟

题目1:二叉树的前序遍历

链接:. - 力扣(LeetCode)

/*** 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 DFS_pre(TreeNode* ptr, vector<int>& result) {if(ptr == nullptr) return;result.push_back(ptr->val);DFS_pre(ptr->left, result);DFS_pre(ptr->right, result);}vector<int> preorderTraversal(TreeNode* root) {//个人尝试:递归求解//前序:中左右vector<int> result;DFS_pre(root, result);return result;}
};

补充说明:对于二叉树的前中后续遍历,传入的指针参数只有一个


题目2:对称二叉树

链接:. - 力扣(LeetCode)

/*** 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 Compare_Left_And_Right(TreeNode* left, TreeNode* right) {//终止条件if(left == nullptr && right == nullptr) return true;if(left != nullptr && right == nullptr) return false;if(left == nullptr && right != nullptr) return false;if(left->val != right->val) return false;                           //比较中侧(这四个终止条件,都是对中侧的比较)bool outside = Compare_Left_And_Right(left->left, right->right);    //比较外侧bool inside = Compare_Left_And_Right(left->right, right->left);     //比较内侧return (outside && inside);}bool isSymmetric(TreeNode* root) {//自己尝试:递归法if(root == nullptr) return true;return Compare_Left_And_Right(root->left, root->right);}
};

补充:对于这个题,递归函数体内部传入了两个指针参数


感悟:在做这个题之前,我一直以为递归算法只能指定一个遍历方向,但其实递归非常的强大,可以指定多个方向同时遍历;

(1)如果递归函数体只能传入一个指针参数,那么递归只能往同一个方向遍历;例如对二叉树前中后序的遍历,都是只有一个参数的递归,因此递归函数体的内部主逻辑中,只有对这一个参数的处理,而在递归函数体内部再一次调用递归函数体时,也是只能传入一个参数,那么这就导致我们只能往一个方向遍历;比如上个递归体中参数是左分支,那么当前这个递归体传入的参数必须是左分支的左分支,即都是往左进行的遍历;(否则一会往左递归,一会往右递归,就乱套了,没有了共同规则的约束)

(2)如果递归函数体可以传入两个指针参数,那么递归就可以往两个方向同时进行;例如对称二叉树这个题,我们想左子树往左遍历,右子树往右遍历,那么递归的参数必须有俩,一个遵循往左走, 一个遵循往右走,即两个参数往两个不同的方向走;

图解:

前序遍历(统一往左侧遍历)
对称二叉树(双向遍历)

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

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

相关文章

京东详情比价接口优惠券(2)

京东详情API接口在电子商务中的应用与作用性体现在多个方面&#xff0c;对于电商平台、商家以及用户都带来了显著的价值。 首先&#xff0c;从应用的角度来看&#xff0c;京东详情API接口为开发者提供了一整套丰富的功能和工具&#xff0c;使他们能够轻松地与京东平台进行交互。…

后台运行程序时报错

问题描述&#xff1a;使用pycharm连接服务器运行程序时&#xff0c;可以正常运行。但是使用Termius终端运行时报错&#xff08;运行时切换到和pycharm相同的路径&#xff09;。 2024-04-15 14:35:01.663900: I external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:454] …

Java基础(变量)

什么是变量&#xff1f; 变量&#xff1a;在程序的执行过程中&#xff0c;其值有可能发生改变的量&#xff08;数据&#xff09; 变量的使用场景 当某个数据经常发生改变时&#xff0c;我们也可以用变量储存。当数据变化时&#xff0c;只要修改变量里面记录的值即可。 变量…

加州大学戴维斯分校最新Nature Ecology Evolution(IF=19)!入侵植物在成为生态威胁之前可能会休眠几十年甚至几百年

根据加利福尼亚大学戴维斯分校领导的一项新研究&#xff0c;入侵植物在被引入环境后可能会休眠几十年甚至几百年&#xff0c;然后才会迅速扩展并造成生态破坏&#xff08;非常意外和可怕&#xff09;。这项发表在《Nature Ecology & Evolution》上的研究调查了全球九个地区…

掌握JMeter HTTP 请求头:简单易懂

在深入研究 JMeter 的过程中&#xff0c;任何涉及性能测试或接口验证的专业人员都会认识到&#xff0c;合理配置HTTP请求头部信息是实现精确测试的关键步骤之一。不同情景下&#xff0c;如数据提交形式的不同&#xff08;例如 JSON、XML 等&#xff09;&#xff0c;或是需要通过…

英语技术会议常用语

个人整理。 自我介绍&#xff1a; Hello everyone, Im [Your Name], and Im excited to be here today. I work as [Your Position] at [Your Company/Organization], where I focus on [Brief Description of Your Role or Expertise]. Im looking forward to our discussion…

YoloV8改进策略:Block改进|轻量级的Mamba打造优秀的YoloV8|即插即用,简单易懂|附Block结构图|检测、分割、关键点均适用(独家原创)

摘要 无Mamba不狂欢,今天给大家带来一个基于轻量级Mamba的改进。模块简单易懂,即插即用! 带领大家去征服更高的领域。 论文:《LightM-UNet:Mamba 辅助的轻量级 UNet 用于医学图像分割》 https://arxiv.org/pdf/2403.05246.pdf UNet及其变体在医学图像分割中得到了广泛…

uniapp开发 如何获取IP地址?

一、需求 使用uniapp开发小程序时&#xff0c;需要调取【记录日活动统计】的接口&#xff0c;而这个接口需要传递一个ip给后台&#xff0c; 那么前端如何获取ip呢&#xff1f;下面代码里可以实现 二、代码实现 1.在项目的manifest.json中配置一下网络权限&#xff1a; &quo…

IDEA pom.xml显示灰色并被划线

在使用 IDEA 进行开发的过程中&#xff0c;有时候会遇到 pom.xml 显示灰色并被划线的情况&#xff0c;如下图&#xff1a; 这一般是因为该文件被 Maven 忽略导致的&#xff0c;可以进行如下操作恢复&#xff1a; 设置保存后&#xff0c;可以看到 pom.xml 恢复了正常&#xff1a…

明日周刊-第6期

最近一周杭州的天气起起伏伏&#xff0c;下雨就凉&#xff0c;不下雨就热。但是夏天的感觉确实是越来越浓烈了&#xff0c;又是一年夏&#xff0c;在这个夏天大家都有什么新的计划呢。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 一、我国自主研发科技壮举震惊全球航天界…

swagger文档无法访问

1. 报错异常 Unable to render this definition The provided definition does not specify a valid version field. Please indicate a valid Swagger or OpenAPI version field. Supported version fields are swagger: "2.0" and those that match openapi: 3.0…

Web前端 JavaScript笔记4

1、元素内容 属性名称说明元素名.innerText输出一个字符串&#xff0c;设置或返回元素中的内容&#xff0c;不识别html标签元素名.innerHTML输出一个字符串&#xff0c;设置或返回元素中的内容&#xff0c;识别html标签元素名.textContent设置或返回指定节点的文本内容&#x…

贝叶斯公式中的先验概率、后验概率、似然概率

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

Jackson 2.x 系列【24】Spring Web 集成之 Jackson2ObjectMapperBuilder

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 前言2. Spring Web3. Jackson2ObjectMapperBuilder3.1 成员属性3.2 静态方法3…

实现名校愿望|在站博士后赴英国剑桥大学做访问学者

国内博士后若再有国外名校背景加持&#xff0c;将会提升日后高校就职的准入门槛分量。为此&#xff0c;我们为Y博士申请到世界顶尖名校-英国剑桥大学的邀请函&#xff0c;在斩获学术成果的同时&#xff0c;也为出站后进入国内高校就职积累更丰富的背景。 Y博士背景&#xff1a;…

如何在CentOS本地部署FastDFS文件系统并实现无公网IP远程上传下载内网文件

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

在一台恢复测试机器上验证oracle备份有效性

一 目的 定期将生产环境oracle数据库恢复到一台测试环境数据库服务器上&#xff0c;以验证备份是否有效&#xff0c;是否能正常恢复。 二 环境 这里以恢复orcl1库为例&#xff0c;计划在orcl这个实例上进行恢复测试。 三 实验步骤 3.1 在目标端创建和源端一样的备份目录 ①…

Pygame经典游戏:贪吃蛇

------------★Pygame系列教程★------------ Pygame经典游戏&#xff1a;贪吃蛇 Pygame教程01&#xff1a;初识pygame游戏模块 Pygame教程02&#xff1a;图片的加载缩放旋转显示操作 Pygame教程03&#xff1a;文本显示字体加载transform方法 Pygame教程04&#xff1a;dra…

「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到技术原理再到业界常用检测工具推荐

软件成分分析&#xff08;Software Composition Analysis&#xff0c;SCA&#xff09;是一种用于识别和分析软件内部组件及其关系的技术&#xff0c;旨在帮助开发人员更好地了解和管理其软件的构建过程&#xff0c;同时可帮助安全人员揭秘软件内部结构的神秘面纱。SCA技术的发展…

罗芬COHERENT pmb激光电源维修HPC830

Rofin激光电源 PMB高压电源维修:HPC625,HPC520,HPC210,HPC840,HPC830,HPC810,HPC818,HPC818 HPC814 HPC910等型号。 大型设备往往都配有功能较为故障诊断程序&#xff0c;我们可以充分利用软件的提示&#xff0c;缩小故障排查范围&#xff0c;但有时诊断软件提示的受损元件是否…