笔记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] …

jeecg 3.4.3前后端分离获取,前端获取当前登录人信息

1. store —>modules—>user.js下 可以查看有哪些信息 2. 使用方式 2.1 //获取登录用户的信息 import user from ‘/store/modules/user’ 2.2 export下 export default { user } 2.3 可以在created中直接打印信息 const useruser.state; console.log(“当前登录人:”…

USB设备热插拔流程解析

设备热插拔 i2c,spi都是主机驱动初始化的时候&#xff0c;就会根据设备树来添加设备 pci的话&#xff0c;主机初始化的时候&#xff0c;会通过总线去遍历枚举card设备 sdio的话&#xff0c;主机驱动初始化的时候&#xff0c;会去枚举卡&#xff1b;插卡可能会触发主机中断&a…

物业满意度调查如何开展?

物业管理行业的服务水平对于提升居民生活质量、维护社区安全和保障房产价值起着重要作用&#xff0c;近年来受地产关联方房屋交付影响&#xff0c;以及疫情后物业投入减少&#xff0c;物业企业对社区环境、设施和公共区域的维护减弱&#xff0c;2023年的降幅尤其明显&#xff0…

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;或是需要通过…

【react】零基础教学写一个最简单的网站和装饰思路

你想要把你的数据放在网络上&#xff0c;给别人分享&#xff0c;难道就是直接闹脑中想一想就能做了么&#xff1f; 并不是&#xff0c;我们看到有五花八门的网站。 这些网站都是非常的好看&#xff0c;玲琅满目的商品让你想要去下单购买。 一个复杂的商城是很复杂&#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…

Python离线语音识别高准确率方案分析及代码实现

背景: 随着信息技术的飞速发展和人工智能的广泛应用,语音识别技术已成为现代通信和人机交互领域的重要组成部分。离线语音识别技术,作为语音识别的一个分支,因其无需实时连接网络、保护用户隐私等特性,在特定场景中发挥着越来越重要的作用。 离线语音识别技术主要指的是…

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

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

python-pytorch 利用word2vec实现lstm模型预测中文文本输出0.1.00

python-pytorch 利用word2vec实现lstm模型预测中文文本输出0.1.00 前言源数据导入包加载数据分析后写入新文件word2vec训练词向量保存word2vec训练词模型保存word2vec词向量加载保存word2vec的模型将分词好的句子依次导入数组中获取word2index、word2index获取word2index、inde…

Java进阶篇——线程通信

0.前言 推荐新手先阅读基础篇 http://t.csdnimg.cn/Xrq8a 1.前提条件 线程同步是线程通信的前提 线程同步常用方法&#xff1a;sychronized关键字&#xff0c;Lock接口 2.两种线程通信方式 2.1定义 Monitor——同步监视器&#xff0c;对象可以是任何类型&#xff0c;因此定义…

深入探讨VIVE OpenXR:为Unity开发者的全面指南

随着虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术的迅速发展&#xff0c;开发者们对于能够简化和优化沉浸式应用开发的工具需求日益增长。HTC Vive 作为行业内的领先品牌&#xff0c;其最新推出的 VIVE OpenXR 插件为Unity开发者提供了一个强大…

PowerShell 安装、升级、禁止升级检查

文章目录 下载安装Zip安装Msi安装 升级禁止升级检查 下载 Powershell安装指南&#xff0c;提供了多种安装路径&#xff0c;推荐zip方式&#xff0c;简单快捷。 因从官网下载msi或者zip非常慢&#xff0c;推荐从某个开源镜像站下载powershell的安装包&#xff0c;msi或者zip&am…

明日周刊-第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…