首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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.

3.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); } } } (层遍历无法使用递归的方法) 补充(非递归实现先

    1K20

    js二叉树层遍历

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

    62230

    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.减少对象成员和数组项的查找

    2K20

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

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

    94110

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

    假设是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},则重建二叉树并返回。

    27220
    领券