js用递归遍历多维数组_漫画:Go 讲解二叉树系列 第二讲(层次遍历与BFS)

da375a7b91b33c0fe42bba7d1138af47.png

761e4a0cd9ba2790477477f83bbdd1a9.png

在上一节中,我们通过例题学习了二叉树的DFS(深度优先搜索),其实就是沿着一个方向一直向下遍历。那我们可不可以按照高度一层一层的访问树中的数据呢?当然可以,就是本节中我们要讲的BFS(宽度优先搜索),同时也被称为广度优先搜索。

我们仍然通过例题进行讲解:

0 1第102题:二叉树的层次遍历 第102题:给定一个二叉树,返回其按层次遍历的节点值。(即逐层地,从左到右访问所有节点)。 3d3194c3fc4ce0956dca7dce286ccc14.png

例如:

给定二叉树: [3,9,20,null,null,15,7],

    3

   / \

  9  20

    /  \

   15   7

返回其层次遍历结果:[[3],[9,20],[15,7]]

本系列内容均为必须掌握!

02BFS介绍 ae16caafb201f6da11496919f3a8a776.png

BFS,广度/宽度优先。其实就是从上到下,先把每一层遍历完之后再遍历一下一层。假如我们的树如下:

0b010508ec18ac9d44961ba83e34dc4f.png

按照BFS,访问顺序如下:


a->b->c->d->e->f->g

了解了BFS,我们开始对本题进行分析。

03递归求解 e44875189212b29a07dcea25887f2515.png

同样,我们先考虑本题的递归解法。想到递归,我们一般先想到DFS。我们可以对该二叉树进行先序遍历(根左右的顺序),同时,记录节点所在的层次level,并且对每一层都定义一个数组,然后将访问到的节点值放入对应层的数组中。

假设给定二叉树为[3,9,20,null,null,15,7],图解如下:

1d727a7f152399b948802e2519b7d2f4.png

29ab6bfba77b04e947ac75d52ea700e9.png

根据分析,代码如下:

 1
04BFS求解 e44875189212b29a07dcea25887f2515.png

上面的解法,其实相当于是用DFS的方法实现了二叉树的BFS。那我们能不能直接使用BFS的方式进行解题呢?当然,我们可以使用Queue的数据结构。我们将root节点初始化进队列,通过消耗尾部,插入头部的方式来完成BFS。

具体步骤如下图:

e0442fc66ed076613ccf37316ce403b8.png

根据分析,完成代码:

 1

注:本系列所有教程中都不会用到复杂的语言特性,大家不需要担心没有学过相关语法。算法思想最重要,使用各语言纯属本人爱好。同时,本系列所有代码均在leetcode上进行过测试运行,保证其严谨性!

推荐阅读

  • 漫画:Go 讲解二叉树系列 第一讲(最大深度与DFS)


喜欢本文的朋友,欢迎关注“Go语言中文网”:

1da69ce8d9cb9fa2256a498eb1fdcf81.png

Go语言中文网启用微信学习交流群,欢迎加微信:274768166,投稿亦欢迎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值