当前位置:首页 > JavaScript

js实现前序遍历

2026-02-03 03:33:56JavaScript

前序遍历简介

前序遍历(Preorder Traversal)是二叉树遍历的一种方式,顺序为:根节点 → 左子树 → 右子树。以下是 JavaScript 实现前序遍历的几种方法。

递归实现

递归是最直观的方法,代码简洁:

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

迭代实现(使用栈)

通过栈模拟递归过程,避免递归的调用栈开销:

function preorderTraversal(root) {
    const result = [];
    const stack = [];
    if (root) stack.push(root);
    while (stack.length) {
        const node = stack.pop();
        result.push(node.val); // 访问根节点
        // 右子树先入栈,保证左子树先处理
        if (node.right) stack.push(node.right);
        if (node.left) stack.push(node.left);
    }
    return result;
}

Morris 遍历

空间复杂度优化为 O(1),通过临时修改树结构实现:

function preorderTraversal(root) {
    const result = [];
    let curr = root;
    while (curr) {
        if (!curr.left) {
            result.push(curr.val);
            curr = curr.right;
        } else {
            let predecessor = curr.left;
            while (predecessor.right && predecessor.right !== curr) {
                predecessor = predecessor.right;
            }
            if (!predecessor.right) {
                result.push(curr.val); // 访问根节点
                predecessor.right = curr;
                curr = curr.left;
            } else {
                predecessor.right = null;
                curr = curr.right;
            }
        }
    }
    return result;
}

注意事项

  • 递归方法在树深度较大时可能导致栈溢出。
  • 迭代方法通过显式栈结构更安全,适合大规模数据。
  • Morris 遍历节省空间,但会修改原始树结构(临时性)。

根据需求选择合适的方法,递归适合简单场景,迭代和 Morris 适用于性能敏感场景。

js实现前序遍历

标签: 遍历js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url,…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…