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

题目

给定一个二叉树的根节点 root ,返回 它的中序 遍历 。

代码

方法一:递归

bash 复制代码
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

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

方法二:迭代

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

bash 复制代码
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        res=[]
        stack=[]
        cur=root
        while cur or stack:
            while cur :
                stack.append(cur)
                cur=cur.left
            
            cur=stack.pop()
            res.append(cur.val)
            cur=cur.right
        return res

方法三:颜色标记

这是评论区中的一个方法,在每个节点之前使用1来标记节点是否每个子树的根节点,0标记每个子树的左右节点。

通过改变节点入栈的顺序来确定二叉树的遍历方法。因为栈具有先进后出的特点,所以在进行中序遍历的时候是右、中、左节点先后入栈,因为出栈的时候是左、中、右出栈。

bash 复制代码
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        WHITE,GRAY=0,1
        res=[]
        stack=[(WHITE,root)]
        while stack:
            color,node=stack.pop()
            if node is None:continue
            if color==WHITE:
                stack.append((WHITE,node.right))
                stack.append((GRAY,node))
                stack.append((WHITE,node.left))
            else:
                res.append(node.val)
        return res
相关推荐
1104.北光c°4 分钟前
滑动窗口HotKey探测机制:让你的缓存TTL更智能
java·开发语言·笔记·程序人生·算法·滑动窗口·hotkey
zm-v-159304339862 小时前
Python 数据挖掘从入门到精通:回归 / 分类 / 聚类 / 关联分析完整教程
python·数据挖掘·回归
仰泳的熊猫4 小时前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
qq_417695057 小时前
机器学习与人工智能
jvm·数据库·python
无极低码7 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
漫随流水7 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
软件算法开发8 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
yy我不解释8 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
superior tigre8 小时前
22 括号生成
算法·深度优先