数据结构:二叉树遍历

在 JavaScript 中实现二叉树的遍历,可以使用递归或迭代的方式。以下是三种常见的遍历方式:前序遍历 (Pre-order)、中序遍历 (In-order)和后序遍历(Post-order)。

定义二叉树节点类

js 复制代码
class TreeNode {
    constructor(val) {
        this.val = val;
        this.left = null;
        this.right = null;
    }
}

前序遍历(Pre-order Traversal)

前序遍历的顺序是:根节点 -> 左子树 -> 右子树。

js 复制代码
function preOrderTraversal(root) {
    if (!root) return [];
    const result = [];
    function traverse(node) {
        if (!node) return;
        result.push(node.val); // 访问根节点
        traverse(node.left); // 遍历左子树
        traverse(node.right); // 遍历右子树
    }
    traverse(root);
    return result;
}

中序遍历(In-order Traversal)

中序遍历的顺序是:左子树 -> 根节点 -> 右子树。

js 复制代码
function inOrderTraversal(root) {
    if (!root) return [];
    const result = [];
    function traverse(node) {
        if (!node) return;
        traverse(node.left); // 遍历左子树
        result.push(node.val); // 访问根节点
        traverse(node.right); // 遍历右子树
    }
    traverse(root);
    return result;
}
}

后序遍历(Post-order Traversal)

后序遍历的顺序是:左子树 -> 右子树 -> 根节点。

js 复制代码
function postOrderTraversal(root) {
    if (!root) return [];
    const result = [];
    function traverse(node) {
        if (!node) return;
        traverse(node.left); // 遍历左子树
        traverse(node.right); // 遍历右子树
        result.push(node.val); // 访问根节点
    }
    traverse(root);
    return result;
}

假设有这样一颗树

js 复制代码
	1
   / \
  2   3
 / \
4   5

我们可以创建这棵树并进行遍历:

js 复制代码
const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);

console.log(preOrderTraversal(root)); // 输出: [1, 2, 4, 5, 3]
console.log(inOrderTraversal(root)); // 输出: [4, 2, 5, 1, 3]
console.log(postOrderTraversal(root)); // 输出: [4, 5, 2, 3, 1]

本内容由AI搜索,仅供学习参考

相关推荐
CQ_07122 小时前
自学力扣:最长连续序列
数据结构·算法·leetcode
弥彦_2 小时前
cf1925B&C
数据结构·算法
好易学·数据结构12 小时前
可视化图解算法56:岛屿数量
数据结构·算法·leetcode·力扣·回溯·牛客网
Ashlee_code17 小时前
裂变时刻:全球关税重构下的券商交易系统跃迁路线图(2025-2027)
java·大数据·数据结构·python·云原生·区块链·perl
闻缺陷则喜何志丹18 小时前
【带权的并集查找】 P9235 [蓝桥杯 2023 省 A] 网络稳定性|省选-
数据结构·c++·蓝桥杯·洛谷·并集查找
jie*18 小时前
python(one day)——春水碧于天,画船听雨眠。
开发语言·数据结构·python·算法·线性回归
草莓熊Lotso20 小时前
【LeetCode刷题指南】--数组串联,合并两个有序数组,删除有序数组中的重复项
c语言·数据结构·其他·刷题
weixin_4196583120 小时前
数据结构之B-树
java·数据结构·b树
H_HX_xL_L20 小时前
数据结构的算法分析与线性表<1>
数据结构·算法
overFitBrain20 小时前
数据结构-2(链表)
数据结构