当前位置:网站首页>golang刷leetcode: 在每个树行中找最大值
golang刷leetcode: 在每个树行中找最大值
2022-08-02 20:37:00 【用户9710217】
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。
示例1:
输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
示例2:
输入: root = [1,2,3]
输出: [1,3]
提示:
二叉树的节点个数的范围是 [0,104]
-231 <= Node.val <= 231 - 1
解题思路:
1,二叉树的题都不绕简单明了,本题常见两种解法
A,广度优先遍历
B,深度优先遍历
2,广度优先遍历思路:用两个队列交替存储每一行,求出每个队列中的最大值即可。
3,深度优先遍历:深度优先一般是递归解,每次递归的时候记录当前访问的深度,递归过程中对相同深度的取最大值。
代码实现:
广度优先遍历:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func largestValues(root *TreeNode) (r []int ){
if root==nil{
return []int{}
}
var q1,q2 []*TreeNode
q1=append(q1,root)
for len(q1)>0 {
v:= q1[0].Val
for len(q1)>0{
h:=q1[0]
q1=q1[1:]
if h.Val > v {
v= h.Val
}
if h.Left!=nil{
q2=append(q2,h.Left)
}
if h.Right!=nil{
q2=append(q2,h.Right)
}
}
r=append(r,v)
if len(q2)>0{
v:=q2[0].Val
for len(q2)>0{
h:=q2[0]
q2=q2[1:]
if h.Val>v{
v=h.Val
}
if h.Left!=nil{
q1=append(q1,h.Left)
}
if h.Right!=nil{
q1=append(q1,h.Right)
}
}
r=append(r,v)
}
}
return r
}
深度优先遍历
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func largestValues(root *TreeNode) (r []int ){
var dfs func(root*TreeNode,depth int)
dfs=func(root*TreeNode,depth int){
if root==nil{
return
}
if len(r)==depth{
r=append(r,root.Val)
}else{
if root.Val>r[depth]{
r[depth]=root.Val
}
}
dfs(root.Left,depth+1)
dfs(root.Right,depth+1)
}
dfs(root,0)
return r
}
边栏推荐
- The software testing process specification is what?Specific what to do?
- Qt提升自定义控件,找不到头文件
- 《分布式微服务电商》专题(一)-项目简介
- 用户之声 | GBASE南大通用实训有感
- 2018HBCPC个人题解
- 如何使用windbg查看C#某个线程的栈大小 ?
- YOLOv5+BiSeNet——同时进行目标检测和语义分割
- 数据库分析与优化
- "Weekly Translate Go" This time we have something different!-- "How to Code in Go" series launched
- 美国爱荷华州立大学| Improving Distantly Supervised Relation Extraction by Natural Language Inference(通过自然语言推理改进远程监督关系提取)
猜你喜欢
开关、电机、断路器、电热偶、电表接线图大全
.NET性能优化-你应该为集合类型设置初始大小
【3D视觉】realsense D435三维重建
Li Mu hands-on learning deep learning V2-bert and code implementation
【SLAM】DM-VIO(ros版)安装和论文解读
SQL基础练习题(mysql)
How to quickly compare two byte arrays for equality in .NET
Solve the docker mysql can't write Chinese
用户之声 | 我与GBase的缘分
用了TCP协议,就一定不会丢包吗?
随机推荐
PyRosetta 安装方法之Conda安装
解道6-编程技术3
ACE JET NPOI
拥抱Cmake小朋友 简单又实用,但是不灵活
有效解决MySQL报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO/YES)
Geoip2 - golang golang source code analysis
接口测试常用工具及测试方法(入门篇)
golang source code analysis: uber-go/ratelimit
什么是 IDE
Informatics Olympiad All-in-One (1260: [Example 9.4] Intercepting Missiles (Noip1999))
Linphone 被叫方如何解析来电SIP消息中的自定义头消息
你是几星测试/开发程序员?技术型选手王大拿......
OP analysis and design
Electrical diagram of power supply system
第七章 噪声
HCIP--BGP基础实验
PLC working principle animation
ALV concept explanation
2170. 使数组变成交替数组的最少操作数
php 单引号 双引号 -> => return echo