【LeetCode热题100道笔记】二叉树的中序遍历

题目描述

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

示例 1:

输入:root = [1,null,2,3]

输出:[1,3,2]

示例 2:

输入:root = []

输出:[]

示例 3:

输入:root = [1]

输出:[1]

提示:

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

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

思考

二叉树中序遍历的核心规则是 "左子树 → 根节点 → 右子树",采用递归实现时,可将遍历过程拆解为"子问题":对于当前节点,先递归遍历其左子树(直到左子树为空,触发回溯),再记录当前根节点的值,最后递归遍历其右子树。

若当前节点为空(如叶子节点的左/右子树),直接返回空数组,避免递归报错;非空节点则分别收集左子树、右子树的遍历结果,最终按"左结果 + 根值 + 右结果"的顺序拼接,即可得到完整的中序遍历序列。

代码

javascript 复制代码
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var inorderTraversal = function(root) {
    if (!root) return [];
    let leftList = [], rightList = [];
    if (root.left) {
        leftList = [...inorderTraversal(root.left)];
    }
    if (root.right) {
        rightList = [...inorderTraversal(root.right)];
    }
    return [...leftList, root.val, ...rightList];    
};
相关推荐
啊吧怪不啊吧18 分钟前
二分查找算法介绍及使用
数据结构·算法·leetcode
知识搬运工人26 分钟前
对比 DeepSeek(MLA)、Qwen 和 Llama 系列大模型在 Attention 架构/算法层面的核心设计及理解它们的本质区别。
算法
d111111111d1 小时前
STM32外设学习-串口数据包笔记-(数据包的了解)
笔记·stm32·单片机·嵌入式硬件·学习
修行者Java1 小时前
JVM 垃圾回收算法的详细介绍
jvm·算法
AndrewHZ1 小时前
【图像处理基石】什么是光流法?
图像处理·算法·计算机视觉·目标跟踪·cv·光流法·行为识别
mjhcsp2 小时前
C++ 三分查找:在单调与凸函数中高效定位极值的算法
开发语言·c++·算法
立志成为大牛的小牛2 小时前
数据结构——四十二、二叉排序树(王道408)
数据结构·笔记·程序人生·考研·算法
Funny_AI_LAB4 小时前
李飞飞联合杨立昆发表最新论文:超感知AI模型从视频中“看懂”并“预见”三维世界
人工智能·算法·语言模型·音视频
wdfk_prog7 小时前
[Linux]学习笔记系列 -- [kernel]kthread
linux·笔记·学习
RTC老炮7 小时前
webrtc降噪-PriorSignalModelEstimator类源码分析与算法原理
算法·webrtc