leetcode199 二叉树的右视图

news2025/2/7 0:52:58
题目

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

示例

在这里插入图片描述
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

解析

这道题首先能想到的办法,就是使用迭代法层次遍历,然后在每一层的最右边那个节点加入到结果集中即可

func rightSideView(root *TreeNode) []int {
	ans := []int{}
	if root == nil {
		return ans
	}
	queue := list.New()
	queue.PushBack(root)
	for queue.Len() > 0 {
		length := queue.Len()
		for i := 0; i < length; i++ {
			node := queue.Remove(queue.Front()).(*TreeNode)
			if node.Left != nil {
				queue.PushBack(node.Left)
			}
			if node.Right != nil {
				queue.PushBack(node.Right)
			}
			if i == length-1 {
				ans = append(ans, node.Val)
			}
		}
	}
	return ans
}

还有一种更为巧妙的方法是,使用递归法,先递归右子树,再递归左子树,同时在递归的时候在多传一个参数是二叉树的深度,当深度等于答案结果集的长度时,就将此时递归到的节点追加到答案中

func xxx(root *TreeNode) []int {
	ans := []int{}
	var traversal func(node *TreeNode, depth int)

	traversal = func(node *TreeNode, depth int) {
		if node == nil {
			return
		}
		if depth == len(ans) {
			ans = append(ans, node.Val)
		}
		fmt.Print(node.Val)
		traversal(node.Right, depth+1)
		traversal(node.Left, depth+1)
	}
	traversal(root, 0)
	return ans
}

上面的代码再解释下,因为递归先遍历的时右子树,在根节点的时候,深度为0,结果集的长度也为0,所以把根节点的值加入结果集;然后先递归右子树,深度为1,结果集的长度也为1,就也加进去,依此类推。
每次优先遍历右节点而非左节点,实际上保证了“某一层第一次被访问的节点一定在这一层的最右边”,因此只需要能够判断某一层是不是被第一次访问就行,怎么判断?加一个depth参数就可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1598534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)

1.简介 上一篇宏哥介绍是如何使用logback将日志输出到控制台中&#xff0c;但是如果需要发给相关人需要你拷贝出来&#xff0c;有时候由于控制台窗口的限制&#xff0c;有部分日志将会无法查看&#xff0c;因此我们还是需要将日志输出到文件中&#xff0c;因此今天主要介绍和分…

视频号小店被严重低估,私域电商再次崛起,这次真的不一样!

大家好&#xff0c;我是电商笨笨熊 在视频号正式推出电商之后&#xff0c;我听到过很多贬低的话&#xff1b; 有人觉得腾讯没有做电商的基因&#xff0c; 有人觉得这不过是资本打一枪换一个地方罢了&#xff0c;最终都是普通人承担后果&#xff0c; 总之&#xff0c;这样的…

华为海思数字芯片设计笔试第五套

声明 下面的题目作答都是自己认为正确的答案&#xff0c;并非官方答案&#xff0c;如果有不同的意见&#xff0c;可以评论区交流。 这些题目也是笔者从各个地方收集的&#xff0c;感觉有些题目答案并不正确&#xff0c;所以在个别题目会给出自己的见解&#xff0c;欢迎大家讨论…

【Zabbix】zabbix 软件监控

使用zabbix监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态 利用一个优秀的监控软件&#xff0c;我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器状态 ●可以在 Web 前端方便的查看监控…

three.js两大神器:粒子效果与补间动画,很好很强大!

本期介绍three.js的两大神奇&#xff0c;开始了。 一、什么是粒子效果 粒子效果在计算机图形学和动画中有多种应用和作用。以下是一些常见的粒子效果的应用和作用&#xff1a; 创建自然现象&#xff1a;粒子效果可以用来模拟自然现象&#xff0c;如雨、雪、火焰、烟雾、云等。…

Day91:API攻防-接口安全SOAPOpenAPIRESTful分类特征导入项目联动检测

目录 API分类特征-SOAP&OpenAPI&RESTful API分类特征 API常见漏洞 API检测流程 API检测项目-Postman&APIKit&XRAY 工具自动化-SOAP - WSDL Postman 联动burpxray APIKit插件(可联动xray) 工具自动化-OpenApi - Swagger Postman 联动burpxray APIKit…

[Algorithm][双指针][复写零][快乐数][盛水最多的容器][有效三角形的个数]详细解读 + 代码实现

目录 1.复写零1.题目链接2.算法原理讲解3.代码实现 2.快乐数1.题目链接2.算法原理讲解3.代码实现 3.盛水最多的容器1.题目链接2.算法原理讲解3.代码实现 4.有效三角形的个数1.题目链接2.算法原理讲解3.代码实现 1.复写零 1.题目链接 题目链接 2.算法原理讲解 先找到最后一个…

使用python在本地指定的目录临时模拟服务器,看懂这份Python面经大厂真不是问题

先自我介绍一下&#xff0c;小编浙江大学毕业&#xff0c;去过华为、字节跳动等大厂&#xff0c;目前阿里P7 深知大多数程序员&#xff0c;想要提升技能&#xff0c;往往是自己摸索成长&#xff0c;但自己不成体系的自学效果低效又漫长&#xff0c;而且极易碰到天花板技术停滞…

Unity MySql安装部署与Unity连接 下篇

一、前言 上篇讲到了如何安装与部署本地MySql&#xff1b;本篇主要讲Unity与MySql连接、创建表、删除表&#xff0c;然后就是对表中数据的增、删、改、查等操作。再讲这些之前会说一些安装MySql碰到的一些问题和Unity连接的问题。 当把本地MySql部署好之后&#xff0c;我们可能…

如何简单下载指定版本的jdk

Oracle 官方提供的 Java Development Kit (JDK) 的归档站点。它主要用于存放历史版本的 JDK&#xff0c;供开发者下载和使用。 附上站点地址&#xff1a;Archived OpenJDK GA Releases 在这个站点可以找到各版本的jdk&#xff0c;简单实用~ 找到版本&#xff0c;点击tar.gz进…

【Origin+Python】使用External Python批量出图代码参考2

目录 前情提要进阶代码去除水印 前情提要 基础教程见链接: 【OriginPython】使用External Python批量出图代码参考 这里主要介绍一些进阶代码以及使用盗版origin要如何去除水印的方法&#xff01; ############################################################# 进阶代码 …

轻松上手MYSQL:MYSQL初识(上)

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《MYSQL入门》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 轻松上手MYSQL&#xff1a;从零开始构建你的数据库世界 &#x1f680; &#x1f680;欢迎来到My…

关于android studio无法连接到荣耀手机的超级简单终极解决办法

首先我要吐槽下网上那么多人那么多文章没一个有用的。亲测机型&#xff1a;荣耀40c 首先官方指导&#xff1a; 1.换数据线 2.开发者模式----》》》关闭锁屏----》》》打开唤醒 3.安装adb 驱动 下面几点是误区&#xff1a;千万别碰&#xff0c;浪费大家时间 被网上文章误解…

【Next】动态路由、加载 UI 和流式传输

动态路由 动态段作为 params 属性传递给 layout、page、route 和 generateMetadata 函数。 /app/blog/[slug]/page.tsx export default function Page({params}: {params:{slug:string}}) {return <h1>Slug Page -- {params.slug}</h1> };/app/shop/[...slug]/pa…

SAP 技巧篇:Script脚本模拟人工操作批量录入数据

“ 现在大环境都讲人工智能、自动化办公等场景的应用&#xff0c;这里我们介绍一下SAP本身自带的自动化工具” 文章最后附最终脚本 01 — 背景需求 SAP&#xff1a;批量录入工具&#xff1a;LSMW/BDC/Script 三大工具 LSMW&#xff1a;应用场景多&#xff0c;实现方法多&am…

C# Solidworks二次开发:模型中实体Entity相关操作API详解

大家好&#xff0c;今天要讲的一些API是关于实体的相关API。 在开发的过程&#xff0c;很多地方会涉及到实体的相关操作&#xff0c;比如通过实体选中节点。下面就直接开始介绍API&#xff1a; &#xff08;1&#xff09;第一个API为Select4&#xff0c;这个API的含义为选中一…

工业物联网让“制造”变成“智造”!——青创智通

工业物联网解决方案-工业IOT-青创智通 随着科技的不断进步和工业的持续发展&#xff0c;物联网&#xff08;IoT&#xff09;技术的出现为制造业带来了前所未有的变革。工业物联网&#xff08;IIoT&#xff09;作为物联网技术在工业领域的应用&#xff0c;正在逐渐改变传统的制…

JavaScript:使用color-convert实现颜色色值转换

color-convert支持如下颜色格式的转换&#xff1a; rgb, hsl, hsv, hwb, cmyk, ansi, ansi16, hex文档 https://www.npmjs.com/package/color-converthttps://github.com/Qix-/color-convert 安装 $ npm install color-convert使用示例 import convert from color-convert…

深入理解Mesh Shader优化原理

参照AMD官网文章和GDC中其分享内容https://gpuopen.com/learn/mesh_shaders/mesh_shaders-index/总结自用&#xff0c;大佬直接原文。 一、传统顶点着色器管线与Mesh 着色器对比 具体之前也研究过可参照&#xff1a;DX12_Mesh Shaders Render 这里主要针对之前忽略的一些知识…

[BT]BUUCTF刷题第17天(4.15)

第17天&#xff08;共3题&#xff09; Web [强网杯 2019]高明的黑客 .tar.gz 是 Linux 系统下的压缩包&#xff0c;访问即可下载 打开后有3000多个php文件&#xff0c;通过题解得知需要写Python脚本找出合适的GetShell文件&#xff08;因为每个文件里都会通过system函数执行…