【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)(递归栈空间)。该方法直观体现了中序遍历的定义,是解决此类问题的经典递归范式。

相关推荐
小星星闪亮登场7 分钟前
Codeforces Round 1115 ( Div. 2)
数据结构·c++·算法·贪心算法·排序算法·codeforces
计算机小白一个8 分钟前
蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)
java·数据结构·算法·蓝桥杯
Loge编程生活11 分钟前
打卡信奥刷题(3449)用C++实现信奥题 P10429 [蓝桥杯 2024 省 B] 拔河
开发语言·数据结构·c++·算法·青少年编程
卷无止境38 分钟前
当独立开发者也能造出3A画质的游戏:Godot引擎深度解析
后端·python·godot
2601_957174651 小时前
大模型算法 简单 容易 用这个方法
算法
VALENIAN瓦伦尼安教学设备1 小时前
激光对中仪采购要点
数据库·嵌入式硬件·算法
vx-程序开发2 小时前
springboot农产品运输服务平台---附源码75498
java·javascript·spring boot·python·eclipse·django·php
Dxy12393102162 小时前
python 中的 APScheduler 使用详解
开发语言·python
染指11103 小时前
76.高级RAG-后检索器(时间排序)
人工智能·python·llama_index·llamaindex
Forever Nore3 小时前
LeetCode 1 两数之和
算法·leetcode·职场和发展