【力扣hot100】刷题笔记Day11

前言

  • 科研不顺啊......又不想搞了,随便弄弄吧,多花点时间刷题,今天开启二叉树!

94. 二叉树的中序遍历 - 力扣(LeetCode)

  • 递归

    • # 最简单递归
      class Solution:def inorderTraversal(self, root: TreeNode) -> List[int]:if not root:return []return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)# 通用模板        
      class Solution:def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:res = []  # 收集结果def dfs(root):if not root:  # 访问到空结点直接返回returndfs(root.left)        # 左res.append(root.val)  # 中dfs(root.right)       # 右dfs(root)return res
  • 迭代

    • 图和代码参考王尼玛题解
    • class Solution:def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:res = []stack = []while stack or root:# 不断往左子树方向走,每走一次就将当前节点保存到栈中# 这是模拟递归的调用if root:stack.append(root)root = root.left# 当前节点为空,说明左边走到头了,从栈中弹出节点并保存# 然后转向右边节点,继续上面整个过程else:temp = stack.pop()res.append(temp.val)root = temp.rightreturn res
  •  Morris遍历

    • 过程看官解的动图
    • cur无左孩子,说明到最左端:
      • 加入结果,cur右移
    • cur有左孩子,说明有前驱,找前驱
      • 前驱无右孩:生成链接、cur左移
      • 前驱有右孩:断开连接,记录cur结果,cur右移
    • class Solution:def inorderTraversal(self, root: TreeNode) -> List[int]:res = []  # 用于存储中序遍历结果的列表cur, prev = root, None  # 初始化当前节点cur和前驱节点prevwhile cur:  # 当前节点cur不为空时循环执行if not cur.left:  # 左子树为空(到最左端)res.append(cur.val)  # 将当前节点cur的值加入结果列表cur = cur.right  # 将当前节点指向右子树else:prev = cur.left  # 找到当前节点cur的左子树的最右节点(前驱)while prev.right and prev.right != cur:prev = prev.rightif not prev.right:  # 如果前驱节点的右孩子为空(添加连接)prev.right = cur  # 将前驱节点的右孩子指向当前节点cur = cur.left  # 将当前节点移动到左子树else:prev.right = None  # 恢复最右节点右孩子为空res.append(cur.val)  # 将当前节点cur的值加入结果列表cur = cur.right  # 将当前节点移动到右子树return res  # 返回中序遍历结果
  •  标记迭代

    • class Solution:def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:res = []stack = [(0, root)]  # 0表示当前未访问,1表示已访问while stack:flag, cur = stack.pop()if not cur: continueif flag == 0:stack.append((0, cur.right))  # 右stack.append((1, cur))        # 中stack.append((0, cur.left))   # 左else:res.append(cur.val)return res
      

二叉树所有遍历模板总结

144. 二叉树的前序遍历 - 力扣(LeetCode)

145. 二叉树的后序遍历 - 力扣(LeetCode)

102. 二叉树的层序遍历 - 力扣(LeetCode)

589. N 叉树的前序遍历 - 力扣(LeetCode)

后言

  • 今天把以上几个二叉树遍历的题目模板刷熟!这样后面的题才能信手拈来~

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

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

相关文章

idea运行项目时右下角弹出“Lombok requires enabled annotation processing”

文章目录 错误描述原因分析解决方式参考 错误描述 Lombok requires enabled annotation processing:翻译过来就是Lombok 需要启用注释处理 原因分析 idea安装了Lombok插件,但有些设置未做。 解决方式 参考 idea配置和使用Lombok

【FPGA】高云FPGA之数字钟实验->HC595驱动数码管

高云FPGA之IP核的使用 1、设计定义2、设计输入2.1 数码管译码显示2.2 74HC595驱动2.3 主模块设计 3、分析和综合4、功能仿真6.1 hex8模块仿真6.2 HC595模块 5、布局布线6、时序仿真7、IO分配以及配置文件(bit流文件)的生成8、配置(烧录&#…

代码检测规范和git提交规范

摘要:之前开发的项目,代码检测和提交规范都是已经配置好的,最近自己新建的项目就记录下相关配置过程。 1. ESlint配置 2013年6月创建开源项目,提供一个插件化的JavaScript代码检测工具,创建项目是生成的eslintrc.js文…

【算法分析与设计】

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 题目 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位…

如何使用Express框架构建一个简单的Web应用

在这个数字化时代,Web应用的需求越来越多样化和复杂化。在前端开发领域,Express框架作为一个快速、灵活的Node.js Web应用程序框架,拥有强大的功能和丰富的生态系统,深受开发者们的青睐。本篇博客将带您一步步探索如何使用Express…

Bert基础(四)--解码器(上)

1 理解解码器 假设我们想把英语句子I am good(原句)翻译成法语句子Je vais bien(目标句)。首先,将原句I am good送入编码器,使编码器学习原句,并计算特征值。在前文中,我们学习了编…

代码随想录算法训练营第四十天|343. 整数拆分、96. 不同的二叉搜索树。

343. 整数拆分 题目链接:整数拆分 题目描述: 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 解题思路: 1、确定dp数组…

flink内存管理,设置思路,oom问题,一文全

flink内存管理 1 内存分配1.1 JVM 进程总内存(Total Process Memory)1.2 Flink 总内存(Total Flink Memory)1.3 JVM 堆外内存(JVM Off-Heap Memory)1.4 JVM 堆内存(JVM Heap Memory)…

运维的利器–监控–zabbix–第二步:建设–部署zabbix agent

文章目录 监控客户端部署及添加主机一、在 zabbix-server 安装客户端二、在本机和其他linux主机安装zabbix agent客户端1、安装2、配置3、启动并开机自启4、添加主机创建主机组创建主机等一会或重启zabbix-server查看配置是否成功 三、在其他windows上安装zabbix agent客户端下…

主流的开发语言和开发环境介绍

个人浅见,不喜勿喷,谢谢 软件开发是一个涉及多个方面的复杂过程,其中包括选择合适的编程语言和开发环境。编程语言是软件开发的核心,它定义了程序员用来编写指令的语法和规则。而开发环境则提供了编写、测试和调试代码的工具和平台…

Microsoft的PromptBench可以做啥?

目录 PromptBench简介 PromptBench的快速模型性能评估 PromptBench数据集介绍 PromptBench模型介绍 PromptBench模型加载遇到的问题 第一次在M1 Mac上加载模型 vicuna和llama系列模型 PromptBench各个模型加载情况总结 PromptBench的Prompt快速工程 chain of thought…

WebService学习,wsdl文件详解

目录 第一章、起因1.1)学习原因1.2)提问的过程(逐步提出问题)1、?wsdl链接的含义,有什么作用?2、什么是wsdl文档?3、如何阅读wsdl文件?4、wsdl文件有什么作用&#xff1f…

基于springboot+vue的智慧社区系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

(十四)【Jmeter】线程(Threads(Users))之开放模型线程组(Open Model Thread Group)

简述 操作路径如下: 开放模型线程组(Open Model Thread Group) 是 JMeter 5.5 版本中引入的一个新特性,它允许用户创建具有可变负载的负载配置文件。相较于传统的线程组,开放模型线程组提供了更多的灵活性和动态调整的能力。 优点: 灵活性:允许测试人员根据测试需求动…

python 提取PDF文字

使用pdfplumber,不能提取扫描的pdf和插入的图片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文档\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…

Verilog刷题笔记33

题目: You are given a four-bit input vector in[3:0]. We want to know some relationships between each bit and its neighbour: out_both: Each bit of this output vector should indicate whether both the corresponding input bit and its neighbour to t…

Kafka3.x进阶

来源:B站 目录 Kafka生产者生产经验——生产者如何提高吞吐量生产经验——数据可靠性生产经验——数据去重数据传递语义幂等性生产者事务 生产经验——数据有序生产经验——数据乱序 Kafka BrokerKafka Broker 工作流程Zookeeper 存储的 Kafka 信息Kafka Broker 总…

戏曲文化苑|戏曲文化苑小程序|基于微信小程序的戏曲文化苑系统设计与实现(源码+数据库+文档)

戏曲文化苑小程序目录 目录 基于微信小程序的戏曲文化苑系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 (1)戏曲管理 (2)公告信息管理 (3)公告类型管理…

PostgreSQL 的实体化视图介绍

PostgreSQL 实体化视图提供一个强大的机制,通过预先计算并将查询结果集存储为物理表来提高查询性能。本教程将使用 DVD Rental Database 数据库作为演示例子,指导你在 PostgreSQL中创建实体化视图。 了解实体化视图 实体化视图是查询结果集的快照&…

【高德地图】Android高德地图初始化定位并显示小蓝点

&#x1f4d6;第3章 初始化定位并显示小蓝点 ✅第1步&#xff1a;配置AndroidManifest.xml✅第2步&#xff1a;设置定位蓝点✅第3步&#xff1a;初始化定位✅完整代码 ✅第1步&#xff1a;配置AndroidManifest.xml 在application标签下声明Service组件 <service android:n…