【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];    
};
相关推荐
一条大祥脚6 分钟前
Codeforces Round 1099 (Div. 2) 构造|贪心|图论|还原数组
java·算法·图论
互联网江湖13 分钟前
贝壳一季报,等来春暖花开?
笔记
Sheldon Chao24 分钟前
Lecture 7 基于策略梯度的算法
人工智能·算法·机器学习
始三角龙29 分钟前
LeetCode hoot 100 -- 缺失的第一个正整数
算法·leetcode·职场和发展
w20180040 分钟前
三年级下册语文第五单元作文:奇妙的想象
笔记
飞Link44 分钟前
深度解析孪生网络(Siamese Network):从原理、技巧到实战应用
算法·数据挖掘·回归
测试狗科研平台1 小时前
洞悉微观电荷流动,VASP计算电荷密度分布
算法·云计算·开源软件
xian_wwq1 小时前
【学习笔记】探讨大模型应用安全建设系列5——供应链安全与数据防护
笔记·学习
Orz_Sponge_Bob1 小时前
温州市第三届青少年程序设计竞赛(小学组)题解
算法
Noushiki1 小时前
常见的排序算法
算法·排序算法