首页
学习
活动
专区
圈层
工具
发布

js 实现层序遍历

= [] // 初始化当前层级 let countNum = queue.length // 当前层级的节点数 while(countNum--){ // 遍历当前层级的节点数...push(node.val) // 推入每层的节点值 node.left && queue.push(node.left) // 将当前层级的节点的左右节点推入栈中,供下一层级遍历...node.right && queue.push(node.right)// 将当前层级的节点的左右节点推入栈中,供下一层级遍历 } count...++ // 层级+1 } return res }; 基本逻辑: 层序遍历使用的时广度优先遍历,使用队列存取,先进先出,与广度优先遍历不同的是,广度优先遍历返回一个一维数组,不分层级...,层序遍历分层级,返回多维数组,在每次遍历的过程中,把整层节点都处理完之后,再处理下一层 1.

4.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    二叉树的先序遍历 中序遍历 后序遍历 层序遍历

    也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树 二叉树的遍历 先序遍历 :先遍历根节点,再遍历左节点,最后遍历右节点 中序遍历 :先遍历左节点,再遍历根节点,最后遍历右节点...后序遍历 :先遍历左节点,再遍历右节点,最后遍历根节点 层序遍历 : 自上而下,自左至右逐层访问树的结点的过程就是层序遍历 遍历方法的实现 先建立一棵树 用代码建立以上树 class Node...: //先序遍历 public static void preOrder(Node root){ if (root == null){ return;...//层序遍历 public void levelOrder(TreeNode root){ //不能使用递归 //可以借助一个队列来完成...= null){ queue.offer(cur.right); } } } (层序遍历无法使用递归的方法) 补充(非递归实现先序

    1.7K20

    js二叉树层序遍历

    前言博主最近在刷leetcode,做到二叉树套题的时候发现很多题的解题思路都是基于二叉树的层序遍历来完成的,因此写下这篇文章,记录一下二叉树层序遍历这件"神器"在实战的运用。...leetcode 102.二叉树的层序遍历图片二叉树的层序遍历与传统的前序、中序、后序遍历都有一些区别,他是按层级、从左到右、从上到下进行遍历的,因此当我在遍历当前层节点的时候,肯定需要记录当前层所有节点的...因此需要借助一个辅助数据结构——队列,队列先进后出,符合层序遍历的顺序性,其实此题就是队列 + 广度优先遍历 的一道结合题。...你真的会发现,理解了层序遍历后,解决这些关联题,会如鱼得水一般简单102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的前序遍历515.在每个树行中找最大值...116.填充每个节点的下一个右侧节点指针117.填充每个节点的下一个右侧节点指针II104.二叉树的最大深度111.二叉树的最小深度leetcode 107.二叉树的层序遍历II图片此题与102.二叉树的层序遍历极其相似

    1.1K30

    Js性能优化:循环正序和倒序的性能差异,以及for和foreach的性能比较

    1.正序和倒序,倒序循环是编程语言中常用的性能优化方法 通常不会感觉到性能差异,但是在数据量很大时中,比如下面的代码: var arr=[] for (var i = 0; i < 1000000; i...:1 ms for倒序循环耗时:1 ms foreach循环耗时:1 ms 循环10万次,输出: for正序序循环耗时:5 ms for倒序循环耗时:3 ms foreach循环耗时:2 ms 循环1百万次...,输出: for正序序循环耗时:20 ms for倒序循环耗时:5 ms foreach循环耗时:21 ms 循环1千万次,输出; for正序序循环耗时:176 ms for倒序循环耗时:25 ms foreach...:%s ms", Date.now() - start); 把之前的arr.length换成length,输出: for正序序循环耗时:0 ms for倒序循环耗时:0 ms 性能得到了很大提升。...总结: 1.大数据量循环,尽量用倒序排序,至于倒序为什么性能更好,有知道的可以留言 2.for和foreach的性能相近,在数据量很大,比如一千万时,foreach因为内部封装,比for更耗时 3.减少对象成员和数组项的查找

    2.8K20

    根据后序和中序遍历输出先序遍历

    本文链接:https://blog.csdn.net/weixin_42449444/article/details/85331082 题目描述: 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果...,输出该树的先序遍历结果。...随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。 输出格式: 在一行中输出Preorder:以及该树的先序遍历结果。...否则:①访问根结点;②先序遍历根结点的左子树;③先序遍历根结点的右子树。 简单来说先序遍历就是在深入时遇到结点就访问。 2.中序遍历的递归过程为:若二叉树为空,遍历结束。...否则:①中序遍历根结点的左子树;②访问根结点;③中序遍历根结点的右子树。简单来说中序遍历就是从左子树返回时遇到结点就访问。 3.后序遍历的递归过程为:若二叉树为空,遍历结束。

    1.3K10

    【Groovy】集合遍历 ( 使用集合的 reverseEach 方法进行遍历 | 倒序集合迭代器 ReverseListIterator 类简介 | 代码示例 )

    文章目录 一、使用集合的 reverseEach 方法进行倒序遍历 二、倒序集合迭代器 ReverseListIterator 类简介 三、代码示例 一、使用集合的 reverseEach 方法进行倒序遍历...---- 使用集合的 reverseEach 方法进行倒序遍历 , 传入一个闭包作为参数 , 在该方法中 , 又调用了 each 方法进行遍历 , 只是传入的参数是 倒序迭代器 ; /**..., 传入 倒序集合迭代器 ReverseListIterator 实例对象 和 闭包 作为参数 , 倒序遍历集合 ; private static Iterator each(...类简介 ---- 上述对集合进行方向遍历 , 核心就是 倒序列表集合迭代器 ReverseListIterator 类 , 通过构造该实例对象 , 传入 each 方法 , 即可实现反向遍历 ; 在...() 获取集合中的上一个元素 ; 倒序遍历迭代器原型 : /** * 列表上的反向迭代器。

    1.3K20

    树的遍历(已知前序遍历中序遍历求后序遍历,或者已知后序中序求先序)

    假设是1000个结点以内, 输入前序  4 1 3 2 6 5 7        中序  1 2 3 4 5 6 7  得到后续  2 3 1 5 7 6 4 已知前序遍历中序遍历求后序遍历: import...node.left); postTraverse(node.right); System.out.print(node.data + " "); } // 已知先序中序...,建树 // @param pre 先序遍历的数组 // @param lo 先序遍历的起点下标 // @param in 中序遍历的数组 // @param ini 中序遍历的起点下标...i + 1, n - i - 1); // 右区间 // 最后一个参数是这个子树的有多少结点 return node; } } 题目描述 输入某二叉树的前序遍历和中序遍历的结果...假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    76620
    领券