力扣-二叉树的层序遍历

172 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

前言

数据结构与算法属于开发人员的内功,不管前端技术怎么变,框架怎么更新,版本怎么迭代,它终究是不变的内容。 始终记得在参加字节青训营的时候,月影老师说过的一句话,不要问前端学不学算法。计算机学科的每一位都有必要了解算法,有写出高质量代码的潜意识

一、问题描述

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

示例 1:

输出:[[1],[3,2,4],[5,6]]

示例 2:

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]

提示:

  • 树的高度不会超过 1000
  • 树的节点总数在 [0, 10^4] 之间

二、思路讲解

层次遍历就是要一层一层的遍历,而我们都知道递归是一种解决到底然后再去解决其它问题的特点,也就是在深度。

  • 遍历第一层节点,存入数组
  • 遍历第二层节点,存入数组
  • ...
  • 遍历完所有层的节点,将结果返回 存放的结果第一次进来的时候初始化一个数组,那我们采用什么样的方式去记录层级呢?
  • 很简单,只需要使用一个index,每次递归的时候去让index+1就可以得到不同层级的节点
var levelOrder = function(root) {
    const res = []
    const dfs = (root,index)=>{
        if(!root) return
        if(!res[index]){
            res[index] = [] // 该层节点首次进来,初始化操作
        }
        res[index].push(root.val)
        for(const child of root.children){ // 递归其子节点
            dfs(child,index +1)
        }
    }
    dfs(root,0)
    return res
};

image.png

后续

好了,本篇 力扣-二叉树的层序遍历到这里就结束了,我是邵小白,一个热爱技术、热爱生活、拒绝996的前端小白,欢迎👍评论。