力扣热题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
相关推荐
屁股割了还要学26 分钟前
【数据结构入门】栈和队列
c语言·开发语言·数据结构·学习·算法·青少年编程
Monkey的自我迭代40 分钟前
支持向量机(SVM)算法依赖的数学知识详解
算法·机器学习·支持向量机
让心淡泊1441 小时前
DAY 37 早停策略和模型权重的保存
python
阿彬爱学习1 小时前
AI 大模型企业级应用落地挑战与解决方案
人工智能·算法·微信·chatgpt·开源
L.fountain2 小时前
配送算法10 Batching and Matching for Food Delivery in Dynamic Road Networks
算法·配送
批量小王子2 小时前
2025-08-09通过授权码的方式给exe程序充值
笔记·python
mortimer2 小时前
pydub下音频处理:跨越wav格式的4GB限制这道坎
python·ffmpeg·numpy
Dxy12393102163 小时前
Python合并两个PDF文件
python·pdf
OAFD.3 小时前
Matplotlib 入门到实战:从零开始学 Python 数据可视化
python·信息可视化·matplotlib
WSSWWWSSW3 小时前
Numpy科学计算与数据分析:Numpy广播机制入门与实践
python·数据挖掘·数据分析·numpy