首页 > 其他分享 >js实现层序遍历

js实现层序遍历

时间:2022-08-30 10:56:50浏览次数:55  
标签:node 遍历 层序 js queue 层级 right 节点

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var levelOrder = function(root) {
    if(!root) return []
    let res = []
    let queue = [root]
    let count = 0  //  记录当前层级
    while(queue.length){
        console.log("queue",queue) 
        res[count] = [] //  初始化当前层级
        let countNum = queue.length  //  当前层级的节点数
        while(countNum--){  //  遍历当前层级的节点数
            let node = queue.shift()  // 从前开始取当前层级的节点
            res[count].push(node.val)  //  推入每层的节点值
            node.left && queue.push(node.left)  // 将当前层级的节点的左右节点推入栈中,供下一层级遍历
            node.right && queue.push(node.right)// 将当前层级的节点的左右节点推入栈中,供下一层级遍历
        }
        count++   //  层级+1
    }
    return res
};

基本逻辑:

层序遍历使用的时广度优先遍历,使用队列存取,先进先出,与广度优先遍历不同的是,广度优先遍历返回一个一维数组,不分层级,层序遍历分层级,返回多维数组,在每次遍历的过程中,把整层节点都处理完之后,再处理下一层

1. 将每一层的节点 push 进队列里

2. 对队列中所有节点获取其值,作为返回数组对应层级的值

3. 最终返回一个多维数组,每一维度代表一层,由高到低

 

参考:

https://blog.csdn.net/m0_52409770/article/details/123225716

https://blog.csdn.net/weixin_45771601/article/details/126215915

https://leetcode.cn/problems/binary-tree-level-order-traversal/solution/bfs-de-shi-yong-chang-jing-zong-jie-ceng-xu-bian-l/

标签:node,遍历,层序,js,queue,层级,right,节点
From: https://www.cnblogs.com/beileixinqing/p/16638529.html

相关文章

  • JS 多个 if 判断丝滑
    多个if判断,看着很乱,使用优雅的代码实现一个判断if(fruit=='apple'){console.log('red');}俩个判断if(fruit=='apple'||fruit=='strawberry')......
  • js 实现二叉树中序遍历
    varinorderTraversal=function(root){//迭代if(!root){return[];}letres=[];letstack=[];while(stack.length>......
  • js Linked List Generator All In One
    jsLinkedListGeneratorAllInOnejs链表生成器classListNode{constructor(val,next){this.val=(val===undefined?0:val)this.next=(nex......
  • js 实现解析和构造Url参数
    //解析获取的url中的参数为对象functionparseQueryString(url){if(!url){return{};}constqsArr=decodeURIComponent(url).split("?"......
  • 数据传输格式XML和JSON
    XML:可扩展标记语言格式臃肿,解析麻烦,需要用到第三库 JSON:JavaScript对象表示法都是字符串,解析简单 JSON可支持的数据类型只有六种数值、字符串、布尔值、null、对......
  • .NET 开源工作流: Slickflow流程引擎高级开发(十) -- BpmnJS流程设计器集成
    前言:在Slickflow产品开发过程中,前端流程设计器经历了几个不同的版本(jsPlumb,mxGraph等),目的是为了在设计流程时的用户体验更加良好,得到客户的好评和认可。BpmnJS流程设......
  • Node.js安装简介
    一、Node.js简介Node.js是一个开源和跨平台的JavaScript运行时环境。它几乎是任何类型项目的流行工具!Node.js在浏览器之外运行V8JavaScript引擎(GoogleChrome的内核)。这使......
  • JSP的文件上传和下载
    文件的上传和下载文件的上传和下载,是非常常见的功能。很多的系统中,或者软件中都经常使用文件的上传和下载。比如:微信头像,就使用了上传。邮箱中也有附件的上传和下载功能......
  • 21JSONP及Axios
    JSONP及Axiosjsonp概述:JSONP是一种跨域解决方案,它主要是利用了script标签不受跨域影响的特性来完成对应的请求操作。实际上是一个get请求。什么叫跨域同源策略(属于浏览......
  • 在NodeJS中安装babel
    安装babel安装babel打开终端,输入命令:npminstall--save-dev@babel/core@babel/cli@babel/preset-env@babel/node安装完毕之后,再次输入命令安装:npminstall--save@......