当前位置: 首页 > news >正文

LeetCode热题100--199. 二叉树的右视图--中等

1. 题目

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

示例 1:
输入:root = [1,2,3,null,5,null,4]
输出:[1,3,4]
解释:
在这里插入图片描述

示例 2:
输入:root = [1,2,3,4,null,null,null,5]
输出:[1,3,4,5]
解释:
在这里插入图片描述
示例 3:
输入:root = [1,null,3]
输出:[1,3]

示例 4:
输入:root = []
输出:[]

2. 题解

/*** 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;*     }* }*/
class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> ans = new ArrayList<>();dfs(root, 0, ans);return ans;}private void dfs(TreeNode root, int depth, List<Integer> ans) {if (root == null) {return;}if (depth == ans.size()) { // 这个深度首次遇到ans.add(root.val);}dfs(root.right, depth + 1, ans); // 先递归右子树,保证首次遇到的一定是最右边的节点dfs(root.left, depth + 1, ans);}
}

3. 解析

出自:【视频】如何灵活运用递归?(Python/Java/C++/Go/JS/Rust)

1-4行:这是对TreeNode类的定义或者说结构体的定义,它是一棵二叉树,其中每个节点最多有两个子节点,一个左子节点和一个右子节点。如果没有提供值、左子节点或右子节点,它们将默认为null。

7-13行:这些代码定义了一个名为Solution的类,其中包含了一些与二叉树相关的方法。这段代码的主要功能是找到二叉树的右视图。

16-20行:rightSideView(TreeNode root)是一个方法,它创建一个新的列表来保存结果。然后调用dfs函数开始深度优先搜索并返回结果。

24-30行:dfs(TreeNode root, int depth, List ans)是一个私有的方法,用于执行深度优先搜索。它接受一个根节点、深度和答案列表作为参数。如果当前节点为null,则返回;否则,先递归右子树,然后再递归左子树。这样可以保证在每一层中,最右边的节点会被首先访问到。

在这段代码中,我们使用了深度优先搜索(DFS)的方法来遍历二叉树。我们在每一层的最后遇到的节点就是二叉树的右视图。


文章转载自:

http://XXq50XSS.Lywpd.cn
http://zPaXquSq.Lywpd.cn
http://djf5KuaO.Lywpd.cn
http://cvB37fIm.Lywpd.cn
http://WCAnmhKF.Lywpd.cn
http://AiwU0xX8.Lywpd.cn
http://FLTeChS5.Lywpd.cn
http://0NpUQ2Yi.Lywpd.cn
http://zxRIRpxd.Lywpd.cn
http://kWSdFBfM.Lywpd.cn
http://hA5IdKLL.Lywpd.cn
http://9hJUr48y.Lywpd.cn
http://mIXsq3MZ.Lywpd.cn
http://4yBvY33n.Lywpd.cn
http://CWwBFHUG.Lywpd.cn
http://BAmCvXTs.Lywpd.cn
http://wa1lUBOw.Lywpd.cn
http://QqWyCS1o.Lywpd.cn
http://JowZNP0A.Lywpd.cn
http://6sTVbvdd.Lywpd.cn
http://01fFhXtA.Lywpd.cn
http://E2YtasGX.Lywpd.cn
http://e0AFI3Xj.Lywpd.cn
http://eJLVdkRI.Lywpd.cn
http://jKs3AlQL.Lywpd.cn
http://iRghYbY4.Lywpd.cn
http://APghhzi3.Lywpd.cn
http://d9pPLv0H.Lywpd.cn
http://weG7eHXs.Lywpd.cn
http://7khAcxFO.Lywpd.cn
http://www.dtcms.com/a/377496.html

相关文章:

  • Next系统学习(三)
  • Python深度学习:NumPy数组库
  • Django时区感知
  • PostgreSQL15——Java访问PostgreSQL
  • Shell 函数详解
  • 【系统分析师】第21章-论文:系统分析师论文写作要点(核心总结)
  • Linux 命令(top/ps/netstat/vmstat/grep/sed/awk)及服务管理(systemd)
  • 【图像生成】提示词技巧
  • 揭秘Linux:开源多任务操作系统的强大基因
  • (ICLR-2025)深度压缩自动编码器用于高效高分辨率扩散模型
  • 《Why Language Models Hallucinate》论文解读
  • 【机器学习】通过tensorflow实现猫狗识别的深度学习进阶之路
  • AD5362BSTZ电子元器件 ADI 高精度数字模拟转换器DAC 集成电路IC
  • DMA-M2M存储器与存储器之间读写
  • Mistral Document AI已正式登陆Azure AI Foundry(国际版)
  • 机器学习实战(二):Pandas 特征工程与模型协同进阶
  • Flutter 朦胧效果布局大全:5种方法实现优雅视觉层次
  • 【CVPR2023】奔跑而非行走:追求更高FLOPS以实现更快神经网络
  • PHP学习(第三天)
  • 数仓简要笔记-1
  • 机器人商业化落地需要突破的关键性技术
  • AI 技术体系核心概念
  • STM32H750 I2C介绍及应用
  • 计算机网络---物理层
  • 【freemarker】创建html页面
  • 【华为OD】区块链文件转储系统
  • sprintf不是像printf一样的打印函数吗
  • Js 图片加载完成 与 图片缓存加载的区别
  • 汽车动力电池管理系统(BMS):电动汽车的“智能大脑”
  • n8n add npm module 發生 Module ‘ioredis‘ is disallowed,getaddrinfo EAI_AGAIN