JavaScript算法 — 二叉树遍历

article/2025/10/8 17:31:47

目录

  • 1、构造二叉树
  • 2、递归遍历
  • 3、非递归遍历
    • 3.1 先序
    • 3.2 中序
    • 3.3 后序

1、构造二叉树

树节点:

// 二叉树节点的构造函数
function TreeNode(val, left, right) {this.val = (val===undefined ? 0 : val)this.left = (left===undefined ? null : left)this.right = (right===undefined ? null : right)
}

下面我们需要遍历下面这颗二叉树:
在这里插入图片描述
遍历结果:
先序:“中 - 左 - 右” 0137849256
中序:“左 - 中 - 右” 7381940526
后序:“左 - 右 - 中” 7839415620

2、递归遍历

调用递归的位置不同,结果分为三种。

var preorder = []// 前序结果
var inorder = []// 中序结果
var postorder = []// 后序结果var loop = function(root){// 当前节点为空,表示达到了叶子节点if (root == null) returnpreorder.push(root.val)  // 前序loop(root.left)inorder.push(root.val)// 中序loop(root.right)postorder.push(root.val)// 后序
}
loop(root)

3、非递归遍历

3.1 先序

  1. 根节点入栈,依此取出栈顶元素。
  2. 访问栈顶元素,同时出栈,将栈顶元素作为当前元素,当前元素右节点入栈,左节点入栈(注意:右先入那么右后出)。
  3. 重复上述操作,直到整个栈为空时,则遍历结束。
var preorderTraversal = function(root) {var arr = []arr.push(root)var res = []while (arr.length) {var temp = arr.pop()if (!temp) break;//当前节点的值放入结果数组res.push(temp.val)//右子树入栈if (temp.right) {arr.push(temp.right)}//左子树入栈if (temp.left) {arr.push(temp.left)}}return res
};

3.2 中序

  1. 循环将根节点和其的左子树入栈。
  2. 直到左子树为空时,访问栈顶元素,同时将栈顶元素作为当前元素,并出栈。
  3. 开始访问右子树,循环出栈直到整个栈为空时,则遍历结束。
var inorderTraversal = function(root) {var res = []var arr = []while(arr.length || root) {if (root) {arr.push(root)root = root.left} else {let temp = arr.pop()res.push(temp.val)root = temp.right}}return res
};

3.3 后序

和前序遍历思想相反。
先序是使用push往res数组后面加数据,二后序是使用unshift往数组前面加数据。

var postorderTraversal = function(root) {var arr = []arr.push(root)var res = []while(arr.length) {var temp = arr.pop()if (!temp) breakres.unshift(temp.val)// 从前往后塞入数据if(temp.left) {// 左节点先入栈arr.push(temp.left)}if(temp.right) {arr.push(temp.right)}}return res
};

http://chatgpt.dhexx.cn/article/gJbFZBew.shtml

相关文章

二叉树遍历算法之一:前序遍历

递归实现前序遍历 二叉树的前序遍历是指从根节点出发,按照先根节点,再左子树,后右子树的方法遍历二叉树中的所有节点,使得每个节点都被访问一次。 当调用遍历算法的时候前序遍历的具体过程如下: 首先访问根节点&…

二叉树遍历小结

前言 二叉树是相当重要的数据结构,目前我还只会玩玩它的遍历(年轻不懂事没好好学,不然早就达到人生巅峰了),LeetCode上二叉树的简单题,大部分通过遍历加一点小逻辑即可解决,所以总结一下几种遍…

二叉树遍历之层次遍历算法入门详解

一、引言 二叉树的遍历常见的方法有先序遍历、中序遍历、后序遍历和层次遍历等,本文给出了C语言版本的层次遍历二叉树的算法。 层次遍历的原理很简单,总结为一句话就是“从上到下,从左到右”,就是从树根开始逐层访问二叉树的结点&…

二叉树的四种遍历算法

二叉树作为一种重要的数据结构,它的很多算法的思想在很多地方都用到了,比如STL算法模板,里面的优先队列、集合等等都用到了二叉树里面的思想,先从二叉树的遍历开始: 看二叉树长什么样子: 我们可以看到这颗…

实现二叉树各种遍历算法

目录 前言一、题目1.二叉树的各种遍历过程及遍历算法设计。2.实现二叉树各种遍历算法 总结 前言 提示:记得关注我哦!!! 一、题目 1.二叉树的各种遍历过程及遍历算法设计。 (1) 先序遍历二叉树&#xff1…

算法分析之二叉树遍历

算法相关数据结构总结: 序号数据结构文章1动态规划动态规划之背包问题——01背包 动态规划之背包问题——完全背包 动态规划之打家劫舍系列问题 动态规划之股票买卖系列问题 动态规划之子序列问题 算法(Java)——动态规划2数组算法分析之数…

二叉树遍历算法总结

A. 二叉树的遍历 1.前序遍历二叉树: (1)若二叉树为空,则为空操作,返回空。 (2)访问根结点。 (3)前序遍历左子树。 (4)前序遍历右子树。 a.二叉树前序遍历的递归算法: void PreOrderTraverse(BiTree BT)…

二叉树的遍历算法

遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有节点,使每一个节点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个节…

【算法】二叉树遍历算法总结:前序中序后序遍历

前言 二叉树遍历是非常经典的算法题,也是二叉树的一道基础算法题。 但是在平常的笔试面试中,其出现的频率其实并不是特别的高,我推测是这种题目相对来说比较基础,算是一个基础知识点。 比如剑指offer中出现的后序遍历题目&…

二叉树遍历算法的应用

目录 一、二叉树遍历算法的应用——二叉树的创建 二、二叉树遍历算法的应用——复制二叉树 三、二叉树遍历算法的应用——计算二叉树的深度 四、二叉树遍历算法的应用——计算二叉树节点总数 五、二叉树遍历算法的应用——计算二叉树叶子节点数 一、二叉树遍历算法的应用—…

一文弄懂二叉树的三种遍历方式

关注公众号【高性能架构探索】,后台回复【pdf】,免费获取计算机必备经典书籍 俗话说:学如逆水行舟,不进则退;心似平原走马,易放难收。这句话对程序员而言,体会更深。这行已经越来越卷了,时刻准备着,&#x…

二叉树遍历算法

目录 先序遍历 中序遍历 后序遍历 层序遍历 938. 二叉搜索树的范围和 110. 平衡二叉树 114. 二叉树展开为链表 117. 填充每个节点的下一个右侧节点指针 II 116. 填充每个节点的下一个右侧节点指针 1,三种遍历都是先把二叉树的最左结点循环入栈(DFS迭代)&am…

二叉树的四种遍历算法(结构体数组)

一、二叉树的定义 以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。 例:ABDG##HI####CE#J##F## 对应的二叉树: 思路讲解: 想要遍历二叉树&am…

二叉树的四种遍历方式

概要 树本身是一种简单化的图 ; DFS对应前中后序遍历,BFS对应层序遍历 二叉树结构 struct treenode {int val;treenode *left;treenode *right;treenode() : val(0), left(nullptr), right(nullptr) {}treenode(int x) : val(x), left(nullptr), right(n…

针对Linux学习,值得阅读的五本书籍,不看可能错失机会

今天为了总结一些可以帮助各位在学习过程中提供帮助的一些书籍。 一.鸟叔的私房菜: 本书是知名度颇高的Linux入门书《鸟哥的Linux私房菜基础学习篇》的新版,而详细地介绍了Linux操作系统。全书分为五部分;第一部分部分着重说明计算机的基础知识、Linux的学习方法&a…

从零开始学习Linux(一)关闭虚拟机系统

关闭系统,需要输入如下命令 poweroff然而,你只能得到如下反馈 -bash: poweroff:command not found此项错误是因为poweroff命令是一个系统管理命令。执行此项命令需要高级使用者特权。 因此,为了关闭系统,我们首先需要切换到root…

个人随笔/小白应该如何学习Linux,我的一些心得分享.

大家好,今天给大家分享一下0基础的人如何入门Linux,此文来源:我在上班的路上看到一篇文章,也是写的0基础的人如何学习Linux的文章。当时我在想,我写博文一年多,都是相关Linux及Python等技术的文章&#xff…

Linux学习路线

 关于 Linux Linux 因其开源,免费,可裁剪,被应用到很多领域,尤其是嵌入式设备上。 Android 系统内核也是基于 Linux 的。 另外还有各种服务器和工作站也是用的 Linux。 什么是嵌入式设备?…

为什么要学习 Linux ????

目前企业中大量的使用Linux作为服务器,在以后你们就业后,会发现web服务器Tomcat ,jobss这一类都是搭建在linux上面的,后面我们需要学习的数据库mysql , oracle ,db2, 或者greenplum这一类的,在企…

Linux 学习路线图

1.应用场景 更加高效地学习并达到运用Linux. 2.学习/操作 linux运维学习需要分为四个阶段:初级入门、中级进阶、高级提升、资深方向细化。 第一阶段:初级入门 初级阶段需要把linux学习路线搞清楚,任何学习都是循序渐进的,所以学…