二叉树刷题记(七-二叉树的右侧视图)

本文介绍了二叉树的层次遍历(广度优先搜索)概念,并通过一个中等难度的题目实例,讲解了如何使用层次遍历解决实际问题。作者强调了掌握基本遍历方法的重要性,并鼓励读者坚持练习。文章最后提出了一种从左侧开始的层次遍历变体作为思考题。
摘要由CSDN通过智能技术生成

前言

  • 大家好呀,小嘟我又写文章啦!(今天还蛮比较轻松,所以小嘟我就抓紧时间更新一篇),嘿嘿嘿,希望可以帮助读者哦!

  • 小嘟在这说两句:读者如果想刷题的话,请一定要坚持下去,不能保证一天一题的话,两天一题也可以呀!(这是小嘟为自己的懒惰找的借口,嘿嘿嘿)。在小嘟本人看来,做题这个东西,你一直写还好,隔很长时间不写,然后又想写,就有点困难了(因为你已经养成不写的习惯了,一个事情一旦养成习惯就很难再改变)。

  • 小嘟我对做题的一个看法:要学某一类数据结构,比如说数组、链表、二叉树,首先你得熟练掌握如何遍历这种数据结构,其次才能进阶,做中等,做复杂的难题。如果最基本的遍历都不会,那还做啥题,洗洗睡吧! (😂😂😂小嘟是开玩笑的,不会的话那就请继续加油吧!!!)

  • 聊天结束,开始进入今天的正题👍👍👍

  • 今天小嘟给大家带来的是另一种遍历方式,发现没,我们写的这几篇文章,都离不开一个词:遍历,所以说,我们一定要把遍历这个最基本的掌握好,小嘟和大家继续加油哦!

主题(Topic)

  • 一种新的遍历方式,层次遍历,有时也称广度优先搜索,提到广度,我们不免就想到了深度优先搜索,但这个不是今天的重点,小嘟就稍微提一下。
  • 广度优先搜索(层次遍历)

image.png

看到这个图是不是好熟悉啊,哈哈哈,其实从第一篇题目开始,小嘟一直都用的是这个图。
层次遍历的思路:我们把在同一个水平上的结点当做同层(这里我用箭头线当做层级的基准线),我们要遍历下一层级,那么首先必须把本层的元素都遍历完,才能进行下一层级的遍历,这就是层序遍历的简单介绍。

正文

  • 今日题目(是个中等题哦,但是不要慌,嘿嘿嘿,本嘟在此,不惧)

image.png
image.png

这个题什么意思呢:你把这些结点当做葡萄(在同一个平面上的一串葡萄),我们给这些葡萄编上序号,然后站在图中箭头所在的一边以箭头所指的方向看这些葡萄,能直接看到的葡萄结点就是我们要摘下来的。以示例为例,我们要摘下的葡萄序号为[1,3,4]

题目分析:我们是站在右侧,然后要摘下我们能直接看到的结点,那么什么样的结点我们能直接看到?它有什么特点呢?想到这里,问题就解决了,小嘟替读者说了哦:那就是每层的最右边的结点被看到,每层?是不是就想到层次遍历了呢?,话不多说,看代码呗!

  • 层次遍历的代码实现
var rightSideView = function(root) {
    let res = [];//要返回的数组
    let thisFloor = [];//存放本层结点的数组
    let nextFloor = [];//存放下一层结点的数组
    if (root == null) return res;//如果树为空树,直接返回
    thisFloor.push(root);
    while(thisFloor.length != 0){//本层还有结点
        let node = thisFloor.shift();//从数组的首部取出一个结点,
                                     //并将该结点删除
        if(node.left)  nextFloor.push(node.left)//左结点有
        if((node.right)) nextFloor.push(node.right)//右结点有
        if(thisFloor.length == 0){//本层遍历完,开始重新赋值,更新
            res.push(node.val);
            thisFloor = nextFloor;
            nextFloor = [];
        }
    }
    return res;
};

image.png
代码的解释小嘟都详细的写在代码哪里啦,小嘟在这里简单提一下:每次循环遍历的都是本层的结点同时该结点的下一层孩子结点也保存起来,等到遍历到本层结点的最后一个元素,将该结点返回,然后将下一层的结点又更新为本层结点,然后又接着找下一层的结点,直到下一层对的元素个数为空,循环退出。

结尾

  • 今天小嘟给大家留一个思考题,请看题:还是上边这个题的思想不变,这个时候我从左往右看,返回我直接能看到的元素集合,该怎么做呢?。
  • 若有问题,欢迎留言!!!,小嘟会尽自己最大的努力解决问题。
  • 希望读者看完能有所收获!
  • 谢谢读者点赞点赞点赞啦!
  • 小嘟溜啦溜啦...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱叨叨的小嘟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值