【LeetCode刷题】二叉树的中序遍历

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

示例 1:

复制代码
输入:root = [1,null,2,3]
输出:[1,3,2]

示例 2:

复制代码
输入:root = []
输出:[]

示例 3:

复制代码
输入:root = [1]
输出:[1]

提示:

  • 树中节点数目在范围 [0, 100]
  • -100 <= Node.val <= 100

递归解法

利用递归的 "左→根→右" 顺序遍历,是中序遍历的直观实现。

Python代码

python 复制代码
from typing import Optional, List


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 node:  # 节点非空时才遍历,递归终止条件:node is None
                traverse(node.left)  # 第一步:遍历左子树
                result.append(node.val)  # 第二步:访问当前根节点
                traverse(node.right)  # 第三步:遍历右子树

        traverse(root)  # 从根节点开始递归遍历
        return result


if __name__ == "__main__":
    # 实例化解题类
    sol = Solution()

    # 示例1:构建树 [1,null,2,3] → 输出 [1,3,2]
    root1 = TreeNode(1)
    root1.right = TreeNode(2)
    root1.right.left = TreeNode(3)
    print("示例1输出:", sol.inorderTraversal(root1))
    print("预期结果:", [1, 3, 2])
    print("-" * 30)

    # 示例2:构建空树 [] → 输出 []
    root2 = None
    print("示例2输出:", sol.inorderTraversal(root2))
    print("预期结果:", [])
    print("-" * 30)

    # 示例3:构建树 [1] → 输出 [1]
    root3 = TreeNode(1)
    print("示例3输出:", sol.inorderTraversal(root3))
    print("预期结果:", [1])

LeetCode提交代码

python 复制代码
# Definition for a binary tree node.
# 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 node:
                traverse(node.left)  # 先遍历左子树
                result.append(node.val)  # 再访问当前根节点
                traverse(node.right)  # 最后遍历右子树
        traverse(root)
        return result

程序运行截图展示

总结

本文介绍了二叉树中序遍历的递归实现方法。中序遍历按照"左子树→根节点→右子树"的顺序访问节点。通过Python代码演示了递归解法,定义了一个辅助函数traverse来实现这一逻辑:先递归遍历左子树,然后访问当前节点值,最后递归遍历右子树。提供了三个测试用例验证正确性:包含单节点树、空树和典型二叉树的情况。时间复杂度为O(n),空间复杂度为O(n)(递归栈空间)。该方法直观体现了中序遍历的定义,是解决此类问题的经典递归范式。

相关推荐
卷无止境1 小时前
Python能做嵌入式开发吗?一份写给动手派的生态与硬件全景图
后端·python
月光船幽幽5 小时前
检测用户意图复杂性的关键方法
人工智能·python
鹿角片ljp7 小时前
LeetCode 236. 二叉树的最近公共祖先|递归后序
算法
luj_17687 小时前
大律师考核应重能力与科技素养
c语言·开发语言·c++·经验分享·算法
无定义_7 小时前
Floyd——Warshall
算法
刃神太酷啦8 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
威联通网络存储8 小时前
TS-h3087XU-RP 汽车零部件质检追溯部署
python·汽车
你驴我8 小时前
WhatsApp 多账号场景下的会话归档与历史消息检索优化实践
后端·python
IT毕设实战小研8 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计
带多刺的玫瑰8 小时前
Leecode#9刷题之回文数
数据结构·算法