当前位置:首页 > JavaScript

实现js前序遍历

2026-03-01 13:40:30JavaScript

前序遍历简介

前序遍历是二叉树遍历的一种方式,遍历顺序为:根节点 -> 左子树 -> 右子树。这种遍历方式常用于复制树的结构或表达式的序列化。

递归实现

递归是最直观的实现方式,代码简洁易懂:

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) {
    if (!root) return [];
    const stack = [root];
    const result = [];
    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) {
    let curr = root;
    const result = [];
    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;
}

应用场景

前序遍历适合需要优先访问根节点的场景,如:

实现js前序遍历

  • 表达式树的序列化
  • 目录结构的打印
  • 树的克隆操作

每种实现方式各有优劣:递归写法简洁但可能栈溢出,迭代写法性能稳定但代码稍复杂,Morris遍历节省空间但会修改树结构。根据实际需求选择合适的方法。

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

相关文章

js实现轮播图

js实现轮播图

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

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…