【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. 后序遍历:先访问左子树,再访问右子树,最后访问根节点。常用于删除树结构等操作。

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


相关推荐
徐小黑ACG1 小时前
GO语言 使用protobuf
开发语言·后端·golang·protobuf
花花鱼2 小时前
node-modules-inspector 可视化node_modules
前端·javascript·vue.js
0白露2 小时前
Apifox Helper 与 Swagger3 区别
开发语言
Tanecious.3 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐3 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
想跑步的小弱鸡3 小时前
Leetcode hot 100(day 3)
算法·leetcode·职场和发展
TDengine (老段)4 小时前
TDengine 中的关联查询
大数据·javascript·网络·物联网·时序数据库·tdengine·iotdb
Tttian6224 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
xyliiiiiL4 小时前
ZGC初步了解
java·jvm·算法
爱的叹息5 小时前
RedisTemplate 的 6 个可配置序列化器属性对比
算法·哈希算法