【代码随想录day 12】 力扣 144.145.94.前序遍历中序遍历后序遍历

视频讲解:https://www.bilibili.com/video/BV1Wh411S7xt/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC
力扣题目:https://leetcode.cn/problems/binary-tree-preorder-traversal/
https://leetcode.cn/problems/binary-tree-inorder-traversal/
https://leetcode.cn/problems/binary-tree-postorder-traversal/

其实遍历就像卡哥讲的一样,分为3部分:

  1. 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。

  2. 确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

  3. 确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

拿这三道题举例,首先我要输入根节点,输出遍历数组和返回长度
其次是判断如果输入的根节点为空,我就结束遍历
最后是我需要先遍历左子树,在赋值,再遍历右子树。(中序遍历)。确定好顺序即可
前序遍历:中左右
中序遍历:左中右
后序遍历:左右中

//前序遍历:
void preOrder(struct TreeNode* root, int* ret, int* returnSize) {if(root == NULL)return;ret[(*returnSize)++] = root->val;preOrder(root->left, ret, returnSize);preOrder(root->right, ret, returnSize);
}int* preorderTraversal(struct TreeNode* root, int* returnSize){int* ret = (int*)malloc(sizeof(int) * 100);*returnSize = 0;preOrder(root, ret, returnSize);return ret;
}//中序遍历:
void inOrder(struct TreeNode* node, int* ret, int* returnSize) {if(!node)return;inOrder(node->left, ret, returnSize);ret[(*returnSize)++] = node->val;inOrder(node->right, ret, returnSize);
}int* inorderTraversal(struct TreeNode* root, int* returnSize){int* ret = (int*)malloc(sizeof(int) * 100);*returnSize = 0;inOrder(root, ret, returnSize);return ret;
}//后序遍历:
void postOrder(struct TreeNode* node, int* ret, int* returnSize) {if(node == NULL) return;postOrder(node->left, ret, returnSize);postOrder(node->right, ret, returnSize);ret[(*returnSize)++] = node->val;
}int* postorderTraversal(struct TreeNode* root, int* returnSize){int* ret= (int*)malloc(sizeof(int) * 100);*returnSize = 0;postOrder(root, ret, returnSize);return ret;
}

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

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

相关文章

【Unity】 HTFramework框架(六十七)UDateTime可序列化日期时间(附日期拾取器)

更新日期:2025年8月6日。 Github 仓库:https://github.com/SaiTingHu/HTFramework Gitee 仓库:https://gitee.com/SaiTingHu/HTFramework 索引一、UDateTime可序列化日期时间1.定义UDateTime字段2.日期拾取器(编辑器)3…

Docker的安装,服务器与客户端之间的通信

目录 1、Docker安装 1.1主机配置 1.2apt源的修改 1.3apt安装 2、客户端与服务端通信 2.1服务端配置 2.1.1创建镜像存放目录 2.1.2修改配置文件 2.2端口通信 2.3SSH连接 2.3.1生成密钥 2.3.2传输密钥 2.3.3测试连接 1、Docker安装 1.1主机配置 我使用的两台主机是…

【算法专题训练】09、累加子数组之和

1、题目:LCR 010. 和为 K 的子数组 https://leetcode.cn/problems/QTMn0o/description/ 给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。示例 1: 输入:nums [1,1,1], k 2 输出: 2 解释: 此题 [1,1] 与 [1,1] 为两…

WinXP配置一键还原的方法

使用系统自带的系统还原功能:启用系统还原:右键点击 “我的电脑”,选择 “属性”,切换到 “系统还原” 选项卡,确保 “在所有驱动器上关闭系统还原” 未被勾选,并为系统驱动器(C:)设…

基于模式识别的订单簿大单自动化处理系统

一、系统概述 在金融交易领域,订单簿承载着海量的交易信息,其中大单的处理对于市场流动性和价格稳定性有着关键影响。基于模式识别的订单簿大单自动化处理系统旨在通过智能算法,精准识别订单簿中的大单特征,并实现自动化的高效处理…

table行内--图片预览--image

需求:点击预览,进行预览。支持多张图切换思路:使用插槽;src : 展示第一张图;添加preview-src-list ,用于点击预览。使用插槽(UI组件--> avue)column: 测试数据

560. 和为 K 的子数组 - 前缀和思想

560. 和为 K 的子数组 - 前缀和思想 在算法题中,前缀和是一种能快速计算 “数组中某段连续元素之和” 的预处理方法,核心思路是 “提前计算并存储中间结果,避免重复计算” 前缀和的定义: 对于一个数组 nums,我们可以创…

Python金融分析:从基础到量化交易的完整指南

Python金融分析:从基础到量化交易的完整指南 引言:Python在金融领域的核心地位 在量化投资规模突破5万亿美元的2025年,Python已成为金融分析的核心工具: 数据处理效率:Pandas处理百万行金融数据仅需2.3秒 策略回测速度:Backtrader框架使策略验证效率提升17倍 风险评估精…

MySQL 从入门到实战:全方位指南(附 Java 操作示例)

MySQL 入门全方位指南(附Java操作示例) MySQL 作为最流行的关系型数据库之一,广泛应用于各类应用开发中。本文将从安装开始,逐步讲解 MySQL 的核心知识点与操作技巧,并通过 Java 示例展示客户端交互,帮助你…

从低空感知迈向智能协同网络:构建智能空域的“视频基础设施”

✳️ 引言:低空经济起飞,智能视觉链路成刚需基建 随着政策逐步开放与技术加速成熟,低空经济正从概念走向全面起飞。从载人 eVTOL 到物流无人机,从空中巡检机器人到城市立体交通调度平台,低空场景正在成为继地面交通和…

Node.js- express的基本使用

Express 核心概念​ Express是基于Node.js的轻量级Web框架,封装了HTTP服务、路由管理、中间件等核心功能,简化了Web应用和API开发 核心优势​​ 中间件架构:支持模块化请求处理流程路由系统:直观的URL到处理函数的映射高性能&…

计算机网络:网络号和网络地址的区别

在计算机网络中,“网络号”和“网络地址”是两个密切相关但含义不同的概念,主要用于IP地址的划分和网络标识。以下从定义、作用、关联与区别等方面详细说明: 1. 网络号(Network Number)定义:网络号是IP地址…

【iOS】3GShare仿写

【iOS】3GShare仿写 文章目录【iOS】3GShare仿写登陆注册界面主页搜索文章活动我的总结登陆注册界面 这个界面的ui东西不多,主要就是几个输入框及对输入内容的一些判断 登陆界面 //这里设置了一个初始密码并储存到NSUserDefaults中 NSUserDefaults *defaults [N…

从案例学习cuda编程——线程模型和显存模型

1. cuda介绍CUDA(Compute Unified Device Architecture,统一计算设备架构)是NVIDIA推出的一种并行计算平台和编程模型。它允许开发者利用NVIDIA GPU的强大计算能力来加速计算密集型任务。CUDA通过提供一套专门的API和编程接口,使得…

进阶向:YOLOv11模型轻量化

YOLOv11模型轻量化详解:从理论到实践 引言 YOLO(You Only Look Once)系列模型因其高效的实时检测能力而广受欢迎。YOLOv11作为该系列的最新演进版本,在精度和速度上均有显著提升。然而,原始模型对计算资源的需求较高,难以在边缘设备或移动端部署。轻量化技术通过减少模…

2025-08 安卓开发面试拷打记录(面试题)

想跑路了,开始学八股,几个主动找的大厂试了下水,后续看情况更新。楼主一年经验,学的c被骗来干安卓,双非本科。2025-07-31 小鹏汇天 安卓开发一面synchronizedhandler视图刷新binderjvm垃圾回收内存泄漏排查glide缓…

风丘助力混合动力汽车工况测试:精准采集整车信号解决方案

一、背景 混合动力汽车是介于纯电动汽车与燃油汽车两者之间的一种新能源汽车。它既包含纯电动汽车无污染、启动快的优势,又拥有燃油车续航便捷、不受电池容量限制的特点。在当前环境下,混合动力汽车比纯电动汽车更符合目前的市场需求。 然而&#xff…

​​MCU程序的存储方式与存储区域大小要求​

程序的段的存储方式与存储区域大小要求 程序的存储和运行涉及 ROM(Flash/非易失性存储器) 和 RAM(易失性存储器) 的分配,不同段在存储和运行时具有不同的特性。以下是详细的分类和计算方式:1. 程序文件的存…

Lesson 31 Success story

Lesson 31 Success story 词汇 retire v.退休,退役[运动]去睡觉 构成:re-表示重复 tire v.感到累一tried a.累的 tyre n.轮胎 用法:retire from 单位 从…退休(过去时) 例句:他从学校退休了。 He retired from our school. retire例句: 1.他越来越老了,他即將退休。…

2025年8月4日私鱼创作平台v1.0.4公测版更新发布-完成大部分功能包含关注创作者以及发布作品及合集功能优雅草科技

2025年8月4日私鱼创作平台v1.0.4公测版更新发布-完成大部分功能包含关注创作者以及发布作品及合集功能优雅草科技 鲸鱼小说分销系统介绍 优雅草私鱼创作系统——产品介绍 系统概述 优雅草私鱼创作系统(简称“私鱼”)是一款专注于私域流量运营的垂直化…