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

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

题目

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历

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

思路一

我们这里使用双重循环的方式进行实现,首先声明两个空数组,分别为res何stack,res数组是存储最后返回结果的数组,然后我们使用while循环,循环条件为只要root参数不等于null或者stack.length大于0任何一个条件满足都会继续循环,在循环中我们二层循环也是使用的while,二层循环的条件为当前的root参数不为null就会进行循环,在循环汇总我们使用push方式将root参数添加到stack数组中,在使用unshift方法将root的val属性添加到res数组中,在将root参数的右节点赋值给root参数,最后循环的root参数右节点为null之后我们使用pop方法将stack数组中的末尾数截取下来,在将末尾数的左节点赋值给root参数,以此往复,最后在将res数组返回出去

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var postorderTraversal = function(root) {
    let res = [],stack = [];
    while(root!=null || stack.length>0) {
        while(root!=null) {
            stack.push(root)
            res.unshift(root.val)
            root = root.right
        }
        root =stack.pop().left
    }
    return res
};

思路二

我们这里使用递归进行实现,我们先声明一个空数组stack,然后在声明一个递归函数des,递归函数需要终止条件,我们设置的终止条件是root参数如果为null的情况下则进行终止,后序遍历需要遵循的顺序为先左在右后根,我们根据这个顺序使用des递归函数去递归root参数的左节点和右节点,最后我们使用push方法将root的val参数添加到stack中,我们在进行调用des递归函数,参数为root,最后等递归函数执行完毕后将stack返回出去即可

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var postorderTraversal = function(root) {
    let stack = [];
    function des(root){
        if(root==null){return}
        des(root.left);
        des(root.right);
        stack.push(root.val);
    }
    des(root);
    return stack;
};


相关文章
|
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