【LeetCode75】第三十九题 二叉树的右视图

这篇具有很好参考价值的文章主要介绍了【LeetCode75】第三十九题 二叉树的右视图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

题目:

示例:

分析:

代码:


题目:

【LeetCode75】第三十九题 二叉树的右视图,LeetCode75题解,算法,leetcode,c++,数据结构

示例:

【LeetCode75】第三十九题 二叉树的右视图,LeetCode75题解,算法,leetcode,c++,数据结构

分析:

题目给我们一棵二叉树,让我们返回站在二叉树右边从上到下看到的节点。

那实际上就是要我们对二叉树进行层序遍历,然后把每层的最右边的一个节点拿出来。

所以问题实际上就是要我们对二叉树进行层序遍历,所以我们这边介绍两种层序遍历的方法,分别是DFS和BFS,也就是深度优先搜索和广度优先搜索。

首先是DFS深度优先搜索,我们先定义一个空的二维数组,是用来存放层序遍历的结果的。

我们对二叉树进行先序遍历,在递归遍历的同时携带一个代表深度的参数。

如果存放结果的二维数组的size也就是里面一维数组的数量小于等于深度,那就是我们第一次碰到这一层的节点,我们就往二维数组的后面塞一个一维的空数组。

然后再根据深度来将当前节点的值塞到二维数组的某个一维数组里。

先序遍历完毕,我们也就层序遍历完毕了。

【LeetCode75】第三十九题 二叉树的右视图,LeetCode75题解,算法,leetcode,c++,数据结构

这是DFS层序遍历的方法。我个人认为比较简单,不过层序遍历最经典的是BFS广度优先搜索,所以这边我们也将一下BFS怎么层序遍历。

我们拿一个队列,首先先把跟节点塞进队列里。

然后进入一个while循环,只要队列为空我们就退出循环,在循环体里我们先给存层序遍历的二维列表里塞一个空的一维列表,然后先记录一下队列的长度,然后再for循环队列长度次数,在for循环里再每次取出一个队列里的节点,把节点的值塞进二维数组的最后一个一维数组里面。

再对节点做判断,如果其左子树不为空,就把左子节点塞进队列里,如果其右子树不为空,把右子节点再塞进去。

这样就是每次我们只取二叉树的一层节点,并且存住每层的节点值后,还把每个节点的子节点塞进了队列,这样队列里就是下一层的节点了。

直到队列为空,那么就表示层序遍历完毕。

最终二维数组就是我们层序遍历的结果。

【LeetCode75】第三十九题 二叉树的右视图,LeetCode75题解,算法,leetcode,c++,数据结构

以上两种方法都可以对二叉树进行层序遍历。而本题中,我们需要把每层的最右边的节点返回出去,所以我们还需要取走二维数组里每个数组的最后一个元素。

代码:

DFS层序遍历

class Solution {
public:
    vector<vector<int>>cache;
    void find(TreeNode* root,int deep){
        if(root==nullptr) return;
        if(cache.size()<=deep) cache.push_back(vector<int>(0));
        cache[deep].push_back(root->val);
        find(root->left,deep+1);
        find(root->right,deep+1);
    }
    vector<int> rightSideView(TreeNode* root) {
        find(root,0);
        vector<int>res;
        for(auto&c:cache){
            res.push_back(*(c.end()-1));
        }
        return res;
    }
};

BFS层序遍历 文章来源地址https://www.toymoban.com/news/detail-682985.html

class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        if(root==nullptr) return {};
        vector<vector<int>>cache;
        queue<TreeNode*>q;
        q.push(root);
        while(!q.empty()){
            cache.push_back(vector<int>(0));
            int l=q.size();
            for(int i=0;i<l;i++){
                TreeNode* node=q.front();q.pop();
                cache.back().push_back(node->val);
                if(node->left) q.push(node->left);
                if(node->right) q.push(node->right);
            }
        }
        vector<int>res;
        for(auto& c:cache){
            res.push_back(*(c.end()-1));
        }
        return res;
    }
};

到了这里,关于【LeetCode75】第三十九题 二叉树的右视图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解数据结构第三弹——二叉树(3)——二叉树的基本结构与操作

    二叉树(1): 深入理解数据结构第一弹——二叉树(1)——堆-CSDN博客 二叉树(2): 深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度-CSDN博客 前言: 在前面我们讲了堆及其应用,帮助我们初步了解了二叉树的一些原理,但那与真正的二叉树仍有不同,

    2024年04月09日
    浏览(49)
  • 【Leetcode60天带刷】day14二叉树——144.二叉树的前序遍历,145.二叉树的后序遍历,94.二叉树的中序遍历

    144. 二叉树的前序遍历 给你二叉树的根节点  root  ,返回它节点值的  前序   遍历。 示例 1: 示例 2: 示例 3: 示例 4: 示例 5: 提示: 树中节点数目在范围  [0, 100]  内 -100 = Node.val = 100 145. 二叉树的后序遍历 给你一棵二叉树的根节点  root  ,返回其节点值的  后序遍历

    2024年02月10日
    浏览(52)
  • 【LeetCode】102. 二叉树的层序遍历、107. 二叉树的层序遍历 II

     作者:小卢 专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》 102. 二叉树的层序遍历 给你二叉树的根节点  root  ,返回其节点值的  层序遍历  。 (即逐层地,从左到右访问所有节点)  示例:

    2024年02月13日
    浏览(39)
  • 二叉树OJ题:LeetCode--104.二叉树的最大深度

    朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第104道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏: 数据结构与算法 个  人  主  页  : stackY、 C 语 言 专 栏 : C语言:从入门到精通  Leet

    2024年02月11日
    浏览(82)
  • LeetCode算法二叉树—222. 完全二叉树的节点个数

    目录 222. 完全二叉树的节点个数 - 力扣(LeetCode) 代码: 运行结果:  给你一棵  完全二叉树  的根节点  root  ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集

    2024年02月07日
    浏览(45)
  • 【Leetcode -101.对称二叉树 -144.二叉树的前序遍历】

    题目:给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1, 2, 2, 3, 4, 4, 3] 输出:true 示例 2: 输入:root = [1, 2, 2, null, 3, null, 3] 输出:false 提示: 树中节点数目在范围[1, 1000] 内 100 = Node.val = 100 思路 :化为子问题比较左子树和右子树是否对称;结束条

    2024年02月09日
    浏览(49)
  • 二叉树OJ题:LeetCode--144.二叉树的前序遍历

    朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第144道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏: 数据结构与算法 个  人  主  页  : stackY、 C 语 言 专 栏 : C语言:从入门到精通  Leet

    2024年02月13日
    浏览(40)
  • leetcode543--二叉树的直径

    1. 题意 求二叉树上最远两个节点之间的距离。 2. 题解 2.1 暴力 最长路径的三种情况 通过根节点 在左子树 在右子树 通过根节点的最长路径长度一定是左右子树深度之和。 但是这样求左右子树的深度会不断重复,所以复杂度很高。 2.2 动态规划 我们可以在求深度的时候,更新

    2024年04月26日
    浏览(33)
  • LeetCode:二叉树的前、中、后序遍历——如何创建一棵【二叉树】

    🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 二叉树是一种树形数据结构,其每个节点 最多只有两个子节点 。通常将节点分为三种类型:根节点、内部节点和叶子节点。其中,根节点是二叉树的唯一访问起点,内部节点具有一个父

    2023年04月09日
    浏览(44)
  • 代码随想录 Day13 二叉树 LeetCode T104 二叉树的最大深度 T111 二叉树的最小深度 T222完全二叉树的节点个数

    以下题解的更详细思路来自于:代码随想录 (programmercarl.com) 二叉树的高度与深度 这里先补充一下二叉树深度和高度的概念 高度:二叉树中任意一个节点到叶子结点的距离 深度:二叉树中任意一个节点到根节点的距离 下面给出一个图便于理解 获取高度与深度的遍历方式 高度:后

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包