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

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

前言


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


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


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


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


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

主题(Topic)

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


看到这个图是不是好熟悉啊,哈哈哈,其实从第一篇题目开始,小嘟一直都用的是这个图。

层次遍历的思路:我们把在同一个水平上的结点当做同层(这里我用箭头线当做层级的基准线),我们要遍历下一层级,那么首先必须把本层的元素都遍历完,才能进行下一层级的遍历,这就是层序遍历的简单介绍。

正文

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

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


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

结尾


  • 今天小嘟给大家留一个思考题,请看题:还是上边这个题的思想不变,这个时候我从左往右看,返回我直接能看到的元素集合,该怎么做呢?。
  • 若有问题,欢迎留言!!!,小嘟会尽自己最大的努力解决问题。
  • 希望读者看完能有所收获!
  • 谢谢读者点赞点赞点赞啦!
  • 小嘟溜啦溜啦...
相关文章
|
6月前
二叉树刷题记(二-中序遍历)
二叉树刷题记(二-中序遍历)
|
6月前
|
算法
二叉树刷题记(三-后序遍历)
二叉树刷题记(三-后序遍历)
|
6月前
二叉树刷题记(四-前序遍历)
二叉树刷题记(四-前序遍历)
|
6月前
|
算法
二叉树刷题记(六-二叉搜索树的第k大节点)
二叉树刷题记(六-二叉搜索树的第k大节点)
|
6月前
|
算法
二叉树刷题记(八-二叉树的最大深度-深度遍历)
二叉树刷题记(八-二叉树的最大深度-深度遍历)
|
6月前
二叉树刷题记(九-二叉搜索树中的中序后继-中序遍历)
二叉树刷题记(九-二叉搜索树中的中序后继-中序遍历)
|
6月前
leetcode404左叶子之和刷题打卡
leetcode404左叶子之和刷题打卡
26 0
|
算法
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
43 0
|
Cloud Native
【刷题日记】590. N 叉树的后序遍历
本次刷题日记的第 5 篇,力扣题为:【刷题日记】590. N 叉树的后序遍历 ,简单
|
算法 Java
代码随想录训练营day17|110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 v...
代码随想录训练营day17|110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 v...