当前位置: 首页 > 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

相关文章:

  • 力扣HOT100之回溯:51. N 皇后
  • 学习python day10
  • 【白雪讲堂】多模态技术:统一认知的优化器
  • [CISCN 2021初赛]glass
  • OpenLayers 加载网格信息
  • Redis 5 种基础数据结构?
  • LiveNVR 直播流拉转:Onvif/RTSP/RTMP/FLV/HLS 支持海康宇视天地 SDK 接入-视频广场页面集成与视频播放说明
  • 《清晰思考》
  • 实验设计与分析(第6版,Montgomery)第4章随机化区组,拉丁方, 及有关设计4.5节思考题4.1~4.4 R语言解题
  • 本地(Linux)编译 MySQL 源码
  • 三、zookeeper 常用shell命令
  • 触控精灵 ADB运行模式填写电脑端IP教程
  • Linux基础 -- Linux 启动调试之深入理解 `initcall_debug` 与 `ignore_loglevel`
  • 从零到一选择AI自动化平台:深度解析n8n、Dify与Coze
  • Axure项目实战:运输统计页引入echarts实现高保真设计(JS代码ctrl+c ctrl+v懂得来)
  • 配置vscode中java.configuration.runtimes
  • 贪心算法实战篇2
  • 2262 1527的解码实验程序
  • 弥散制氧机工作机制:高原低氧环境的氧浓度重构技术
  • FPGA实现CNN卷积层:高效窗口生成模块设计与验证
  • php动态网站开发实训8/关键词优化排名软件案例
  • 辽宁东方建设工程有限公司网站/网络服务器是指什么
  • 网站设计怎么写/b站推广网站入口
  • 周口建设局网站/怎么从网上找国外客户
  • html5自适应手机网站模板/免费网站流量
  • 建站专家网站建设系统/报个计算机培训班多少钱