199. 二叉树的右视图【111】

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

难度等级:中等

上一篇算法:

 236. 二叉树的最近公共祖先【190】

力扣此题地址:

199. 二叉树的右视图 - 力扣(Leetcode)

1.题目:199. 二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

199. 二叉树的右视图【111】

2.解题思路:

DFS:

既然是站在右边看树,那么我们看到的结点都是每一层的最右边的结点,这个节点可能在根的右子树上,也可能在根的左子树上。

所以,我们可以递归遍历树,使用深度优先算法,按照【根节点 ->右子树 -> 左子树】的顺序访问。

同时设置一个depth变量,如果depth的值与res集合中的元素数量相等的话,就说明当前被遍历到的这个节点没有放在res中,所以将这个节点的值放到res中,同时每遍历一层就加一,这样就能知道树的深度,也可以保证每一层只有一个节点可以放入res中,这样就可以保证每层都是最先访问最右边的结点的。

(因为先遍历右子树,右子树上的每一层的最右边节点都放入了res中,当右子树遍历完成之后,回过来开始遍历左子树,depth会从头开始计算值,那么已经遍历过的层数会从头开始算,然而res中已经加入了右子树的值,所以当depth的值 != res.size()的时候,就说明这一层已经有了值在res中)

如果还是不理解的话,可以看看代码辅助理解,这张图也可以清晰地展示出思路:

199. 二叉树的右视图【111】

思路参考:

199. 二叉树的右视图 - 力扣(Leetcode)

199. 二叉树的右视图 - 力扣(Leetcode)

BFS:

广度优先的思路:我们可以设置一个堆,然后分别将每一层的结点的值放入堆中,每一层取堆顶的元素即可,堆顶元素就是一层中最右边的结点的值。 可以模仿层次遍历。

3.代码实现:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
 //DFS深度优先算法
class Solution {
    //先创建一个list集合存储数据作为返回
    List<Integer> res = new ArrayList<Integer>();

    public List<Integer> rightSideView(TreeNode root) {
        //传入根节点root,以及depth = 0
        dfs(root,0);
        return res;
    }

    public void dfs(TreeNode root,int depth){
        //先判断,如果根节点为null则返回,同时也是递归的终止条件,访问到叶子结点的下一个的时候为null,则返回
        if(root == null){
            return;
        }

        //先访问当前结点,再递归地访问右子树 和 左子树
        if(depth == res.size()){//如果当前结点所在深度还没有出现在res里,说明在该深度下,当前结点是第一个被访问的结点(按照我们给定的思路规则也是当前深度下的最右边的结点),因此将当前结点加入res中
            res.add(root.val);
        }
        //每递归一次就说明走到下一层,depth++
        depth++;

        //先递归右子树,再递归左子树,这样每一层都能访问到最右边的结点
        dfs(root.right,depth);
        dfs(root.left,depth);
    }
}

4.递归思路拆解分析:

如果对于递归理解的不是很透彻的话,可以看看这篇文章,对应的就是这道题的递归思路讲解

递归思路讲解文章来源地址https://www.toymoban.com/news/detail-431868.html

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

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

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

相关文章

  • 二叉树的右视图

    给定一个二叉树的 根节点 root ,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 示例 2: 示例 3: 代码如下:

    2024年02月16日
    浏览(35)
  • 代码随想录二刷 |二叉树 | 二叉树的右视图

    199.二叉树的右视图 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2: 输入: [1,null,3] 输出: [1,3] 示例 3: 输入: [] 输出: [] 提示: 二叉树的节点个数的范围是 [0,1

    2024年02月04日
    浏览(38)
  • 122 解二叉树的右视图的两种方式

    问题描述:给定一颗二叉树,想想自己站在他的右侧,按照从底部到底部的顺序,饭后从右侧所能看到的节点值。 BFS方式求解,每一层只保留最后一个节点即可。 DFS方法求解:采用先序遍历的方式,不过在访问玩当前结点之后,需要下一个递归是先从右节点开始,记录所有的

    2024年01月20日
    浏览(29)
  • 【LeetCode75】第三十九题 二叉树的右视图

    目录 题目: 示例: 分析: 代码: 题目给我们一棵二叉树,让我们返回站在二叉树右边从上到下看到的节点。 那实际上就是要我们对二叉树进行层序遍历,然后把每层的最右边的一个节点拿出来。 所以问题实际上就是要我们对二叉树进行层序遍历,所以我们这边介绍两种层

    2024年02月10日
    浏览(33)
  • 第十五天|104.二叉树的最大深度、111.二叉树的最小深度、 222.完全二叉树的节点个数

    104.二叉树的最大深度 题目链接:104. 二叉树的最大深度 - 力扣(LeetCode) 111.二叉树的最小深度 题目链接:111. 二叉树的最小深度 - 力扣(LeetCode) 222.完全二叉树的节点个数 题目链接:222. 完全二叉树的节点个数 - 力扣(LeetCode)

    2024年02月11日
    浏览(26)
  • 每日一练:LeeCode-111. 二叉树的最小深度【二叉树】

    本文是力扣LeeCode-111. 二叉树的最小深度 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 给定一个 二叉树 ,找出其 最小深度 。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量 。 说明: 叶子节点是指没有子节点的节点 。 示

    2024年02月02日
    浏览(29)
  • LeetCode第111题 - 二叉树的最小深度

    题目 解答 方案一 方案二 要点 方案一不够优雅,全量计算了所有节点的路径长度,同时复用树节点中的val字段来保存数据。 依据树的递归定义,符合要求的节点要么在左子树,要么在右子树,因此可以利用这个特点,递归的针对树的每个节点的左、右子树,分别求解其最小

    2024年01月22日
    浏览(30)
  • leetcode111. 二叉树的最小深度(java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/minimum-depth-of-binary-tree 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例1: 输入:root = [3,9,20,null,null,15,7] 输出:2 示例2: 输入:

    2024年02月09日
    浏览(25)
  • 【深度优先】【广度优先】Leetcode 104 二叉树的最大深度 Leetcode 111 二叉树的最小深度 Leetcode 110 平衡二叉树

    二叉树节点的深度: 指从根节点到该节点的最长简单路径边的条数或者节点数 (取决于深度从0开始还是从1开始) 二叉树节点的高度: 指从该节点到叶子节点的最长简单路径边的条数后者节点数 (取决于高度从0开始还是从1开始) 【前序求的是深度,后序求的是高度】 -

    2024年02月19日
    浏览(42)
  • leetcode做题笔记111. 二叉树的最小深度

    给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 本题与求二叉树最大深度的题很像,先判断根节点,再递归看左右子树最小值返回最小深度,由于根节点若在的话至少有一个节点所

    2024年02月11日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包