【递归】【前序中序后序遍历】【递归调用栈空间与二叉树深度有关】【斐波那契数】Leetcode 94 144 145

【递归】【前序中序后序遍历】【递归调用栈空间与二叉树深度有关】Leetcode 94 144 145

    • 1.前序遍历(递归) preorder
    • 2.中序遍历(递归)inorder
    • 3.后序遍历(递归)postorder
    • 4. 斐波那契数

---------------🎈🎈题目链接 前序遍历🎈🎈-------------------
---------------🎈🎈题目链接 中序遍历🎈🎈-------------------
---------------🎈🎈题目链接 后序遍历🎈🎈-------------------

1.前序遍历(递归) preorder

时间复杂度分析:
对于每个节点,只访问它一次。因此,时间复杂度是 O(n),其中 n 是二叉树中节点的数量。
空间复杂度分析:
在递归调用过程中,使用了一个辅助列表来存储节点的值。
最坏情况下,二叉树是一个单链的情况,即树的深度等于节点数量n,递归调用栈的深度即为n,此时空间复杂度是 O(n)。
综上所述,时间复杂度是 O(n),空间复杂度是 O(n)。

⭐️递归调用栈的大小和二叉树的深度有关!
在Java中,递归调用栈(Recursion Call Stack)是指在执行递归函数时,系统自动为每次函数调用分配的内存空间。每当函数被调用时,相关的局部变量、参数和返回地址等信息都会被存储在栈内存中,直到函数执行完毕并返回结果,然后系统会释放这些内存空间。

当一个函数在执行过程中调用了自身(或者间接调用了其他函数,形成了递归循环)时,会导致递归调用栈的深度增加。每次递归调用都会向栈内存中压入一帧(Frame),表示一个函数调用的信息,包括函数的参数、局部变量和返回地址等。当递归调用结束时,对应的帧会从栈顶弹出,释放相应的内存空间。

递归调用栈在处理递归算法时非常重要,它可以帮助跟踪每次递归调用的状态,确保递归函数能够正确地返回结果。然而,需要注意的是,递归调用栈的深度是有限的,如果递归的层数过深,可能会导致栈溢出(Stack Overflow)错误。因此,在编写递归函数时,需要谨慎考虑递归的深度和递归终止条件,以避免栈溢出错误。

时间复杂度O(N)
空间复杂度O(N)

在这里插入图片描述

2.中序遍历(递归)inorder

时间复杂度O(N)
空间复杂度O(N)

在这里插入图片描述

3.后序遍历(递归)postorder

时间复杂度O(N)
空间复杂度O(N)

在这里插入图片描述

4. 斐波那契数

  1. 普通递归
public int fib(int n) {if (n < 2)return n;return fib(n - 1) + fib(n - 2);
}
  1. 进阶操作
    递归计算中很多都是重复计算,当n越大,重复的越多,
    所以可以使用一个map把计算过的值存起来,每次计算的时候先看map中有没有,
    如果有就表示计算过,直接从map中取,
    如果没有就先计算,计算完之后再把结果存到map中
class Solution {int constant = 1000000007;public int fib(int n) {HashMap<Integer,Integer> map = new HashMap<>();return fib(n, map);}public int fib(int n, HashMap<Integer,Integer> map){if(n<2) return n;if(map.containsKey(n)){return map.get(n);}int first = fib(n-1,map) % constant;map.put(n-1,first);int second = fib(n-2,map) % constant;map.put(n-2,second);int result = (first + second) % constant;map.put(n,result);return result;}
}

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

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

相关文章

Codeforces Round 345 (Div. 1)A. Watchmen(容斥原理)

A. Watchmen 当欧几里得距离和曼哈顿距离相等时&#xff0c; x 1 x 2 ∣ ∣ y 1 y 2 x1x2||y1y2 x1x2∣∣y1y2 这两个条件满足其一。这和容斥原理一样&#xff0c;至少选择一个的条件。 我们可以计算xi&#xff0c;以及小于i之前的这些&#xff0c;这样可以保证只计算一次…

学习 Redis 基础数据结构,不讲虚的。

学习 Redis 基础数据结构&#xff0c;不讲虚的。 一个群友给我发消息&#xff0c;“该学的都学了&#xff0c;怎么就找不到心意的工作&#xff0c;太难了”。 很多在近期找过工作的同学一定都知道了&#xff0c;背诵八股文已经不是找工作的绝对王牌。企业最终要的是可以创造价…

【服务器数据恢复】HP EVA虚拟化磁盘阵列数据恢复原理方案

EVA存储结构&原理&#xff1a; EVA是虚拟化存储&#xff0c;在工作过程中&#xff0c;EVA存储中的数据会不断地迁移&#xff0c;再加上运行在EVA上的应用都比较繁重&#xff0c;磁盘负载高&#xff0c;很容易出现故障。EVA是通过大量磁盘的冗余空间和故障后rss冗余磁盘动态…

实例分割论文阅读之:《Mask Transfiner for High-Quality Instance Segmentation》

1.摘要 两阶段和基于查询的实例分割方法取得了显著的效果。然而&#xff0c;它们的分段掩模仍然非常粗糙。在本文中&#xff0c;我们提出了一种高质量和高效的实例分割Mask Transfiner。我们的Mask Transfiner不是在规则的密集张量上操作&#xff0c;而是将图像区域分解并表示…

nginx stream proxy 模块的ssl连接源码分析

目录 1. 源起2. 分析验证环境的配置3. 源码分析3.1 代理模块的请求入口点分析3.2 发起与上游服务器的连接3.3 连接回调3.4 TCP连接建立成功后为上下游数据透传做准备3.5 TCP连接的ssl上下文初始化3.6 ssl握手成功后的处理3.7 连接数据的收与发1. 源起 我一直来对ssl建立连接的过…

图片转二进制文件

将图片转换为二进制文件的步骤如下&#xff1a; 打开图片文件&#xff1a;使用适当的编程语言和文件操作函数&#xff0c;如c中的std::ifstream或python中的open函数&#xff0c;打开要转换的图片文件 读取图片数据&#xff1a;使用文件操作函数从打开的图片文件中读取数据。可…

C语言 可变参数列表及相关宏

本文章介绍一下C语言中一些跟可变参数相关的宏及其用法 这里写目录标题 引言va_listva_startva_argva_end以上函数的联合使用样例&#xff1a;vsnprintf__VA_ARGS_ 引言 C语言中有很多的带有可变参数的函数&#xff0c;例如printf函数&#xff0c;它的定义其实是类似这样子的 …

TCP相关知识点

TCP相关知识点 参考&#xff1a; 《计算机网络》 (建议收藏)TCP协议灵魂之问&#xff0c;巩固你的网路底层基础 关于 TCP 三次握手和四次挥手&#xff0c;满分回答在此 (值得看) TCP处于网络体系结构中的运输层。 运输层主要为应用进程提供端到端的逻辑通信&#xff0c;然后对…

zzzzzzzzzzzzzzzzz

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 磁盘满的本质分析 专栏&#xff1a;《Linux从小白到大神》 | 系统学习Linux开发、VIM/GCC/GDB/Make工具…

Vue中的 v-if 与 v-show 的区别

概述 在 Vue.js 中&#xff0c;我们经常需要根据某些条件来显示或隐藏某些元素。这时&#xff0c;v-if 和 v-show 这两个指令就派上了用场。虽然它们都可以用来控制元素的显示与隐藏&#xff0c;但它们的实现方式、性能影响和适用场景都有所不同。 一、区别比较 1.实现方式 …

飞天使-linux操作的一些技巧与知识点7-acme申请证书

文章目录 申请一个谷歌账号 申请一个谷歌账号 申请账号略 1.进入gcloud的shell 界面 $ gcloud config set project usfesfeef $ gcloud beta publicca external-account-keys create Created an external account key [b64MacKey: 8_QhVdsfefesfesfesf6fnw770bCyfp7vz5FeCUkOo…

Snipaste使用

今天推荐一款好用的截图、贴图软件工具&#xff0c;名字叫Snipaste&#xff0c;以下是官方介绍的截图 软件官方下载地址&#xff1a; Snipaste 下载 1、截图功能 2、标注 3、开发中的使用 有时候在开发中需要临时把一些任务规则信息&#xff0c;放在代码编辑器旁边进行参考&am…

【大厂AI课学习笔记】1.5 AI技术领域(5)图像分类

CV的重要应用场景之一&#xff0c;就是图像分类。 图像分类是根据不同的语义信息区分图像&#xff0c;图像作为输入&#xff0c;分为不同的类。主要使用的方法是深度学习和神经网络。 粗粒度的图像分类&#xff0c;是比较容易的&#xff0c;哪怕是区分猫和老虎&#xff0c;但…

<网络安全>《19 安全态势感知与管理平台》

1 概念 安全态势感知与管理平台融合大数据和机器学习技术&#xff0c;提供可落地的安全保障能力&#xff0c;集安全可视化、监测、预警和响应处置于一体。它集中收集并存储客户I环境的资产、运行状态、漏洞、安全配置、日志、流量等安全相关数据&#xff0c;内置大数据存储和多…

Go基础知识学习-习题题解

Exercise: Loops and Functions&#xff0c;学习for循环 package mainimport ("fmt" )func Sqrt(x float64) float64 {z:1.0for i:0;i<10;i{z - (z*z - x) / (2*z)fmt.Println(z)}return z }func main() {fmt.Println(Sqrt(2)) }Exercise: Slices package mainim…

linux之wsl2安装远程桌面

0. 安装后的效果 1. wsl中打开terminal并安装库 sudo apt-get purge xrdp sudo apt install -y xrdp sudo apt install -y xfce4 sudo apt install -y xfce4-goodies 2.优化显示 sudo sed -i s/max_bpp32/#max_bpp32\nmax_bpp128/g /etc/xrdp/xrdp.ini sudo sed -i s/xserverbp…

安全名词解析-水坑攻击、鱼叉攻击、钓鲸攻击

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 水坑攻击02 鱼叉攻击03 钓鲸攻击 01 水坑攻击 水坑攻击&#xff08;Watering Hole Attack&#xff09;是一种针对特定目标的网络攻击方式。顾名思义&#xff0c;是在受害者必经之路设置了一个“水坑…

百亿规模京东实时浏览记录系统的设计与实现

百亿规模京东实时浏览记录系统的设计与实现 系统介绍 浏览记录系统主要用来记录京东用户的实时浏览记录&#xff0c;并提供实时查询浏览数据的功能。在线用户访问一次商品详情页&#xff0c;浏览记录系统就会记录用户的一条浏览数据&#xff0c;并针对该浏览数据进行商品维度…

分享80个行业PPT,总有一款适合您

分享80个行业PPT&#xff0c;总有一款适合您 80个行业PPT下载链接&#xff1a;https://pan.baidu.com/s/1sc44xGll2RZ8Q2aiKDbjEA?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知…

阿里云ECS服务器Linux安装Mysql8

链接&#xff1a;https://pan.baidu.com/s/1s9j7OhiOMV9e9Qq9GDbysA 提取码&#xff1a;dd5a --来自百度网盘超级会员V5的分享 Mysql官网:MySQL 关于Mysql Yum Repository介绍可以看下 更加简单 关于X86和ARM 传到服务器 进入所在包 cd /usr/local/develop/mysql8 解压 …