当前位置: 首页 > news >正文

力扣热题100之二叉树的中序遍历

题目

给定一个二叉树的根节点 root ,返回 它的中序遍历 。
在这里插入图片描述

代码

方法一:递归

在这里插入图片描述

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightclass Solution:def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:result = []def traverse(node: Optional[TreeNode]):if not node:returntraverse(node.left)    # 递归左子树result.append(node.val) # 访问根节点traverse(node.right)    # 递归右子树traverse(root)return result

方法二:迭代

使用栈来代替左节点的递归

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightclass Solution:def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:res=[]stack=[]cur=rootwhile cur or stack:while cur :stack.append(cur)cur=cur.leftcur=stack.pop()res.append(cur.val)cur=cur.rightreturn res

方法三:颜色标记

这是评论区中的一个方法,在每个节点之前使用1来标记节点是否每个子树的根节点,0标记每个子树的左右节点。
通过改变节点入栈的顺序来确定二叉树的遍历方法。因为栈具有先进后出的特点,所以在进行中序遍历的时候是右、中、左节点先后入栈,因为出栈的时候是左、中、右出栈。

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightclass Solution:def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:WHITE,GRAY=0,1res=[]stack=[(WHITE,root)]while stack:color,node=stack.pop()if node is None:continueif color==WHITE:stack.append((WHITE,node.right))stack.append((GRAY,node))stack.append((WHITE,node.left))else:res.append(node.val)return res
http://www.xdnf.cn/news/685873.html

相关文章:

  • 【掌握文件操作】(下):文件的顺序读写、文件的随机读写、文件读取结束的判定、文件缓冲区
  • 【开源工具】跳过网页APP禁止粘贴限制:自动输入键盘模拟工具
  • day12 leetcode-hot100-21(矩阵4)
  • MySQL XtraBackup---笔记
  • 初识Docker:容器化技术的入门指南
  • 关于JavaScript、TypeScript Module的配置和用法
  • Vue 3.0 状态管理Pinia详解
  • JWT安全:接收无签名令牌.【签名算法设置为none绕过验证】
  • 生成式AI与AI代理:技术、应用与未来
  • 《仿盒马》app开发技术分享-- 订单地址修改(端云一体)
  • 全局代理从局域到全域的网络升级
  • 华为AP6050DN无线接入点瘦模式转胖模式
  • 常见的C语言段错误实例及原因分析
  • Java开发——三层架构,分层耦合
  • 【C++指南】C++ list容器完全解读(二):list模拟实现,底层架构揭秘
  • vue2指令方式防抖功能
  • 征程 6X VDSP 调试方法
  • ​​全球购订单查询接口开放:ERP自动同步实战手册​
  • 程序员出海之英语-基础-小猪佩奇 第 1 季第 1 集 泥坑
  • LMEval ,谷歌开源的统一评估多模态AI模型框架
  • MySQL省市区数据表
  • 基于BERT和GPT2的实现来理解Transformer的结构和原理
  • adb查看、设置cpu相关信息
  • azure配置管道监控任务
  • 本地github ssh多账号问题
  • 【Golang入门】第四章:控制结构——从条件分支到异常处理
  • 华为OD机试真题——最小矩阵宽度(宽度最小的子矩阵)(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • craw4ai 抓取实时信息,与 mt4外行行情结合实时交易,基本面来觉得趋势方向,搞一个外汇交易策略
  • FFMPEG推流器讲解
  • CSS选择器:has使用示例