🔥 个人主页:空白诗
文章目录
-
- [一、前序遍历(Preorder Traversal)](#一、前序遍历(Preorder Traversal))
- [二、中序遍历(Inorder Traversal)](#二、中序遍历(Inorder Traversal))
- [三、后序遍历(Postorder Traversal)](#三、后序遍历(Postorder Traversal))
- 四、总结
树的遍历是指按照某种顺序访问树中的每一个节点。常见的树的遍历方法有三种:前序遍历(Preorder Traversal)、中序遍历(Inorder Traversal)和后序遍历(Postorder Traversal)。本文将详细介绍这三种遍历方法的原理、实现及其应用。
开始 前序遍历 访问根节点 递归前序遍历左子树 递归前序遍历右子树 中序遍历 递归中序遍历左子树 访问根节点 递归中序遍历右子树 后序遍历 递归后序遍历左子树 递归后序遍历右子树 访问根节点
一、前序遍历(Preorder Traversal)
前序遍历是指先访问根节点,然后递归地访问左子树,最后递归地访问右子树。
前序遍历的步骤
- 访问根节点。
- 递归地前序遍历左子树。
- 递归地前序遍历右子树。
前序遍历的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)
中序遍历是指先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。
中序遍历的步骤
- 递归地中序遍历左子树。
- 访问根节点。
- 递归地中序遍历右子树。
中序遍历的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)
后序遍历是指先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。
后序遍历的步骤
- 递归地后序遍历左子树。
- 递归地后序遍历右子树。
- 访问根节点。
后序遍历的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]
四、总结
树的遍历是树操作中的基础内容,通过不同的遍历方法,我们可以以不同的顺序访问树中的节点:
- 前序遍历:先访问根节点,再访问左子树,最后访问右子树。常用于复制树结构等操作。
- 中序遍历:先访问左子树,再访问根节点,最后访问右子树。常用于二叉搜索树的排序操作。
- 后序遍历:先访问左子树,再访问右子树,最后访问根节点。常用于删除树结构等操作。
理解和掌握树的遍历方法,对于解决各种树相关的问题具有重要意义。