力扣热题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
相关推荐
丁值心7 分钟前
5.29打卡
开发语言·人工智能·python·机器学习·支持向量机
HakunamatataWang8 分钟前
python 包管理工具uv
python·uv
我有一个魔盒13 分钟前
python uv包管理器使用
开发语言·python·uv
思绪漂移26 分钟前
同源“平滑思想”的问题解法:正则化与拉普拉斯平滑
人工智能·算法
TTBIGDATA34 分钟前
Step9—Ambari Web UI 初始化安装 (Ambari3.0.0)
大数据·hadoop·python·ambari·bigtop·ttbigdata·janettr
想睡hhh39 分钟前
Practice 2025.5.29 —— 二叉树进阶面试题(1)
c++·算法
霖001 小时前
详解GPU
人工智能·vscode·python·fpga开发·mvc·gpu算力
满怀10151 小时前
【数据分析】Pandas
python·机器学习·数据挖掘·数据分析·pandas
vvilkim1 小时前
C# 数组与字符串:全面解析与应用实践
开发语言·算法·c#
阡之尘埃1 小时前
Python使用MD5码加密手机号等敏感信息
python·数据挖掘·数据分析·哈希算法·md5·加密算法