前端算法-前序遍历二叉树

简介: 前端算法-前序遍历二叉树

题目

给你二叉树的根节点 root ,返回它节点值的前序遍历。

输入: root = [1,null,2,3]
输出: [1,2,3]

思路一

我们这里使用递归的方式进行实现,首先声明一个res空数组,用户于接收遍历后的结果值,我们在声明一个preOrder递归函数,这个函数接受二个参数,一个是root参数,一个是res空数组,用于接受结果值,在preOrder函数中,我们先判断一下当前的root参数是不是为空,如果为空则直接return出来,这个也是递归终止的条件,然后在将当前root.val参数通过push方法添加到res数组中,然后进行在将root的左节点和右节点分别使用preOrder函数进行调用,第二个参数都传res数组,最后在将res数组返回出去即可

var preorderTraversal = function (root) {
    const res = [];
    preOrder(root, res);
    return res;
};
var preOrder = function (root, res) {
    if (!root) return;
    res.push(root.val);
    preOrder(root.left, res);
    preOrder(root.right, res);
}

思路二

我们这里使用了栈的方法,我所认为的是所有可以通过递归解决的事情,也可以通过栈的方式进行解决,我们这里声明两个数组,分别为stack和res,这两个都是空数组,然后我们使用循环,循环条件为当前root参数不为null或者stack栈的长度大于0,在循环中在进行二次循环,循环条件为当前的root参数不为null,在二次循环中,我们将root的cal参数使用push方法添加到res数组中,同时也使用push方法将root参数添加到stack数组中,然后将root的左节点赋值给root参数,然后我们会不断的进入root参数的左节点,并通过循环的方式将经过的节点都存储起来,当我们遇到root参数等于null的时候循环会终止,终止之后我们使用pop方法将当前stack数组中的末尾节点并获取到该节点的右节点赋值给root参数,然后就会进入下一次循环,重复这个过程就可以找出前序遍历,最后将res数组返回出去

var preorderTraversal = function(root) {
    const stack = [];
    const res = [];
    while(root !== null || stack.length > 0){
        while(root !== null){
            res.push(root.val);
            stack.push(root);
            root = root.left;
        }
        root = stack.pop().right;
    }
    return res;
};


相关文章
|
2天前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
5天前
|
存储 缓存 算法
如何提高二叉树遍历算法的效率?
选择合适的遍历算法,如按层次遍历树时使用广度优先搜索(BFS),中序遍历二叉搜索树以获得有序序列。优化数据结构,如使用线索二叉树减少空指针判断,自定义节点类增加辅助信息。利用递归与非递归的特点,避免栈溢出问题。多线程并行遍历提高速度,注意线程安全。缓存中间结果,避免重复计算。预先计算并存储信息,提高遍历效率。综合运用这些方法,提高二叉树遍历算法的效率。
18 5
|
5天前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
10 2
|
8天前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
15 0
|
30天前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
18 1
|
1月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
18 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
1月前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
17 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
26天前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
20 0
|
1月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
23 0
|
26天前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
109 2