当前位置:首页 > JavaScript

实现js前序遍历

2026-04-04 14:24:10JavaScript

前序遍历简介

前序遍历是二叉树遍历的一种方式,遍历顺序为:根节点 → 左子树 → 右子树。以下是实现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)的算法,通过临时修改树结构实现遍历。

实现js前序遍历

function preorderTraversal(root) {
    const result = [];
    let current = root;

    while (current) {
        if (!current.left) {
            result.push(current.val);
            current = current.right;
        } else {
            let predecessor = current.left;
            while (predecessor.right && predecessor.right !== current) {
                predecessor = predecessor.right;
            }

            if (!predecessor.right) {
                result.push(current.val);
                predecessor.right = current;
                current = current.left;
            } else {
                predecessor.right = null;
                current = current.right;
            }
        }
    }
    return result;
}

使用场景建议

  • 递归:适合树深度可控的场景,代码简洁
  • 迭代:通用性强,适合大多数场景
  • Morris:对空间复杂度有严格要求的场景

所有方法的时间复杂度均为O(n),其中n为节点数量。根据实际需求选择合适实现方式。

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

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…

js 实现全屏

js 实现全屏

使用 requestFullscreen 方法 通过调用元素的 requestFullscreen 方法可以实现全屏。该方法兼容现代浏览器,但不同浏览器可能需要前缀。 const element =…