【LeetCode-中等题】199. 二叉树的右视图

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

题目

【LeetCode-中等题】199. 二叉树的右视图,力扣,# 中等题,leetcode,链表,算法

方法一:层序遍历取每一层最后一个元素

// 方法一 :层序 + 集合(取每层子集合最后一个元素)
    // List<List<Integer>> Rlist = new ArrayList<>();
    // public List<Integer> rightSideView(TreeNode root) {
    //     if(root == null ) return new ArrayList<>();
    //     Queue<TreeNode> queue = new ArrayDeque<>();
    //     queue.offer(root); 
    //     while(!queue.isEmpty()){
    //         int count = queue.size();
    //         List<Integer> res = new ArrayList<>();
    //         for(int i=0;i<count;i++){
    //             TreeNode node = queue.poll();
    //             res.add(node.val);
    //         if(node.left != null) queue.offer(node.left);
    //         if(node.right != null) queue.offer(node.right);
    //         }
    //         Rlist.add(res);//每层节点集合加入到大集合
    //     }
    //       List<Integer> result = new ArrayList<>();//结果集
    //     for(List list : Rlist ){
    //         result.add((Integer)list.get(list.size()-1));//取每层集合最后一个元素
    //     }
    //     return result;
    // }
// 方法一(优化) :在层序遍历的时候直接要每一层的最后一个元素加入集合  就不需要把一层所有节点的加入集合再去取每层集合最后一个了
    public List<Integer> rightSideView(TreeNode root) {
        List<Integer> Rlist = new ArrayList<>();//结果集
        if(root == null ) return Rlist;
        Queue<TreeNode> queue = new ArrayDeque<>();
        queue.offer(root); 
        while(!queue.isEmpty()){
            int count = queue.size();
            for(int i=0;i<count;i++){
                TreeNode node = queue.poll();
                if(i == count -1)//只取一层最后一个元素(count)
                Rlist.add(node.val);
            if(node.left != null) queue.offer(node.left);
            if(node.right != null) queue.offer(node.right);
            }
        }
        return Rlist;
    }

方法二:深度优先搜索

根 右 左 的顺序 取每层第一个被访问到的节点(depth == list.size())
【LeetCode-中等题】199. 二叉树的右视图,力扣,# 中等题,leetcode,链表,算法文章来源地址https://www.toymoban.com/news/detail-693447.html

   List<Integer> result = new ArrayList<>();
    public List<Integer> rightSideView(TreeNode root) {
       dfs(root,0);//起始递归 root  深度为0
       return result;
    }

    public void dfs(TreeNode tree ,int  depth){
        if(tree == null) return ;

        if(depth == result.size()) result.add(tree.val);//若当前深度 = 集合的大小,说明在该层还没加入任何元素,此时只需加入第一次访问的元素就行
        dfs(tree.right,depth+1);//切换到下一层继续找第一次访问的元素
        dfs(tree.left,depth+1);//切换到下一层继续找第一次访问的元素
    }

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

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

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

相关文章

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

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

    2024年02月10日
    浏览(33)
  • 二叉树的右视图

    给定一个二叉树的 根节点 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)
  • LeetCode(力扣)236. 二叉树的最近公共祖先Python

    https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/

    2024年02月10日
    浏览(27)
  • 【LeetCode】(力扣) c/c++刷题-145. 二叉树的后序遍历

    来源:力扣(LeetCode) 链接: 力扣  

    2024年02月01日
    浏览(54)
  • 【LeetCode力扣】297. 二叉树的序列化与反序列化

      目录 1、题目介绍 2、解题思路  2.1、详细过程图解 2.2、代码描述   2.3、完整代码   原题链接:297. 二叉树的序列化与反序列化 - 力扣(LeetCode)   示例 1: 输入: root = [1,2,3,null,null,4,5] 输出: [1,2,3,null,null,4,5] 示例 2: 输入: root = [ ] 输出: [ ] 示例 3: 输入: root = [1

    2024年02月08日
    浏览(38)
  • 力扣(144. 二叉树的前序遍历&&94.二叉树的中序遍历&&145. 二叉树的后序遍历)

    题目链接 题目1: 思路:较简单的思路,就是先将左孩子全部入栈,然后出栈访问右孩子,右孩子为空,再出栈,不为空,右孩子入栈,然后再次循环访问左孩子。 题目链接 题目2: 思路:同前序遍历一样,只不过访问结点,改为出栈时访问。 题目3链接 题目3: 思路1:同样

    2024年01月19日
    浏览(42)
  • 【力扣 - 二叉树的最大深度】

    给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 树中节点的数量在 [0, 10^4] 区间内。 如果我们知道了左子树和右子树的最大深度 l 和 r ,那么该二叉树的最大深度即为 而左子树和右子树的最大深度又可以以

    2024年02月21日
    浏览(29)
  • 力扣 257. 二叉树的所有路径

    题目来源:https://leetcode.cn/problems/binary-tree-paths/description/    C++题解1:使用递归,声明了全局变量result,遇到叶子节点就将字符串添加到result中。 递归三步法: 1. 确认传入参数:当前节点+已有路径(字符串); 2. 确认终止条件:遇到叶子节点,即左右节点都为空时,将当前

    2024年02月11日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包