【JavaScript 算法】树的遍历:前序、中序与后序


🔥 个人主页:空白诗

文章目录


树的遍历是指按照某种顺序访问树中的每一个节点。常见的树的遍历方法有三种:前序遍历(Preorder Traversal)、中序遍历(Inorder Traversal)和后序遍历(Postorder Traversal)。本文将详细介绍这三种遍历方法的原理、实现及其应用。
开始 前序遍历 访问根节点 递归前序遍历左子树 递归前序遍历右子树 中序遍历 递归中序遍历左子树 访问根节点 递归中序遍历右子树 后序遍历 递归后序遍历左子树 递归后序遍历右子树 访问根节点


一、前序遍历(Preorder Traversal)

前序遍历是指先访问根节点,然后递归地访问左子树,最后递归地访问右子树。

前序遍历的步骤

  1. 访问根节点。
  2. 递归地前序遍历左子树。
  3. 递归地前序遍历右子树。

前序遍历的JavaScript实现

javascript 复制代码
/**
 * 前序遍历二叉树
 * @param {TreeNode} root - 二叉树的根节点
 * @param {number[]} result - 存储遍历结果的数组
 * @return {number[]} - 前序遍历的结果
 */
function preorderTraversal(root, result = []) {
  if (root === null) return result;

  result.push(root.val); // 访问根节点
  preorderTraversal(root.left, result); // 递归访问左子树
  preorderTraversal(root.right, result); // 递归访问右子树

  return result;
}

// 示例
class TreeNode {
  constructor(val, left = null, right = null) {
    this.val = val;
    this.left = left;
    this.right = right;
  }
}

const root = new TreeNode(1, new TreeNode(2), new TreeNode(3));
console.log(preorderTraversal(root)); // 输出: [1, 2, 3]

二、中序遍历(Inorder Traversal)

中序遍历是指先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。

中序遍历的步骤

  1. 递归地中序遍历左子树。
  2. 访问根节点。
  3. 递归地中序遍历右子树。

中序遍历的JavaScript实现

javascript 复制代码
/**
 * 中序遍历二叉树
 * @param {TreeNode} root - 二叉树的根节点
 * @param {number[]} result - 存储遍历结果的数组
 * @return {number[]} - 中序遍历的结果
 */
function inorderTraversal(root, result = []) {
  if (root === null) return result;

  inorderTraversal(root.left, result); // 递归访问左子树
  result.push(root.val); // 访问根节点
  inorderTraversal(root.right, result); // 递归访问右子树

  return result;
}

// 示例
console.log(inorderTraversal(root)); // 输出: [2, 1, 3]

三、后序遍历(Postorder Traversal)

后序遍历是指先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。

后序遍历的步骤

  1. 递归地后序遍历左子树。
  2. 递归地后序遍历右子树。
  3. 访问根节点。

后序遍历的JavaScript实现

javascript 复制代码
/**
 * 后序遍历二叉树
 * @param {TreeNode} root - 二叉树的根节点
 * @param {number[]} result - 存储遍历结果的数组
 * @return {number[]} - 后序遍历的结果
 */
function postorderTraversal(root, result = []) {
  if (root === null) return result;

  postorderTraversal(root.left, result); // 递归访问左子树
  postorderTraversal(root.right, result); // 递归访问右子树
  result.push(root.val); // 访问根节点

  return result;
}

// 示例
console.log(postorderTraversal(root)); // 输出: [2, 3, 1]

四、总结

树的遍历是树操作中的基础内容,通过不同的遍历方法,我们可以以不同的顺序访问树中的节点:

  1. 前序遍历:先访问根节点,再访问左子树,最后访问右子树。常用于复制树结构等操作。
  2. 中序遍历:先访问左子树,再访问根节点,最后访问右子树。常用于二叉搜索树的排序操作。
  3. 后序遍历:先访问左子树,再访问右子树,最后访问根节点。常用于删除树结构等操作。

理解和掌握树的遍历方法,对于解决各种树相关的问题具有重要意义。


相关推荐
pride.li4 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
顽疲4 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
DevUp4 小时前
标着 JavaScript 的 Wiki 与知识库:既不是 CMS 也不是 SSG(番外三)
javascript·node.js·cms
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
kyriewen4 小时前
我上手了 Vite+ 1.0:Node 不用自己装,lint 却翻车了
前端·javascript·程序员
旺仔仔仔5 小时前
机器人项目实战(5):从单次抓取,到接收指令连续做事
算法
旺仔仔仔5 小时前
机器人项目实战(2):识别物体、提取点云,再到抓取姿态
算法
姜鱼问生5 小时前
密码明明一样,为什么 GPG 说“错的“?
后端·算法·架构
启观川5 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
对空六课5 小时前
指标口径生效时间的版本查询实现
大数据·服务器·前端·算法·数据分析