力扣二叉树--第三十四天

前言

今天是构建二叉树和处理两个二叉树的问题。重点:单调栈的思想,后续模块会专门刷题。

内容

一、最大二叉树

654. 最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:

  1. 创建一个根节点,其值为 nums 中的最大值。
  2. 递归地在最大值 左边 的 子数组前缀上 构建左子树。
  3. 递归地在最大值 右边 的 子数组后缀上 构建右子树。

返回 nums 构建的 最大二叉树 

递归
func constructMaximumBinaryTree(nums []int) *TreeNode {if len(nums)==0{return nil}index:=findMax(nums)root:=&TreeNode{Val:nums[index],Left:constructMaximumBinaryTree(nums[:index]),Right:constructMaximumBinaryTree(nums[index+1:]),}//三个逗号return root
}func findMax(nums []int)int{index:=0for i,v:=range nums{if nums[index]<v{index=i}}return index
}
单调栈

解决类似于“下一个更大元素”的问题时非常好用

单调栈中存放的数据应该是有序的,所以单调栈也分为单调递增栈单调递减栈

单调递增栈:单调递增栈就是从栈底到栈顶数据是从大到小

单调递减栈:单调递减栈就是从栈底到栈顶数据是从小到大

维持一个单调递增的栈:

当节点值大于栈顶时,弹出栈顶作为当前节点的左孩子

栈顶的右孩子就是当前节点

当前节点加入栈

func constructMaximumBinaryTree(nums []int)*TreeNode{stack:=[]*TreeNode{}for _,num:=range nums{cur:=&TreeNode{num,nil,nil}for len(stack)>0&&stack[len(stack)-1].Val<num{cur.Left=stack[len(stack)-1]stack=stack[:len(stack)-1]}if len(stack)>0{stack[len(stack)-1].Right=cur}stack=append(stack,cur)}return stack[0]
}
//同一个节点的左右子树会被多次赋值
二、合并二叉树

617. 合并二叉树

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。

深度优先搜索
func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode {if root1==nil{return root2}if root2==nil{return root1}//修改root1 or 新建一个树// root1.Val+=root2.Val// root1.Left=mergeTrees(root1.Left,root2.Left)// root1.Right=mergeTrees(root1.Right,root2.Right)// return root1     root:=&TreeNode{Val:root1.Val+root2.Val,Left:mergeTrees(root1.Left,root2.Left),Right:mergeTrees(root1.Right,root2.Right),}return root
}

最后

坚持!

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

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

相关文章

神经网络核心组件和流程梳理

文章目录 神经网络核心组件和流程梳理组件流程 神经网络核心组件和流程梳理 组件 层&#xff1a;神经网络的基本结构&#xff0c;将输入张量转换为输出张量。模型&#xff1a;由层构成的网络。损失函数&#xff1a;参数学习的目标函数&#xff0c;通过最小化损失函数来学习各…

Git_git相关指令 高阶

git config pull.rebase false git config pull.rebase false是做什么的_fury_123的博客-CSDN博客

postgreSQL 查询所有模式的语句

场景 postgre 数据库下携带模式的分组 sql select schema_name from information_schema.schemata;

linux简述进程

进程 计算机四大存储资源&#xff1a;磁盘资源、内存资源、cpu资源、网络资源 一个正在运行的程序&#xff0c;一个程序运行至少要启动一个进程&#xff0c;主进程 子进程 速度&#xff1a;启动慢&#xff0c;结束慢 资源隔离 资源不共享一个进程正常运行&#xff0c;至少要…

POJ P1088动规的三种解法

Language:Default 滑雪 Time Limit: 1000MSMemory Limit: 65536KTotal Submissions: 123098Accepted: 47211 Description Michael喜欢滑雪百这并不奇怪&#xff0c; 因为滑雪的确很刺激。可是为了获得速度&#xff0c;滑的区域必须向下倾斜&#xff0c;而且当你滑到坡底&#x…

Junos webauth_operation.php 文件上传漏洞复现(CVE-2023-36844)

0x01 产品简介 Junos 是 Juniper Networks 生产的一款可靠的高性能网络操作系统。 0x02 漏洞概述 Junos webauth_operation.php接口处存在文件上传漏洞&#xff0c;未经身份认证的攻击者可利用 Junos 操作系统的 J-Web 服务 /webauth_operation.php 路由上传 php webshell&…

MySQL系列 - 数据类型

MySQL是一种常用的关系型数据库管理系统&#xff0c;它支持多种数据类型&#xff0c;包括整数、浮点数、字符串、日期和时间等。在本文中&#xff0c;我们将介绍MySQL中常用的数据类型及其用法。 MySQL数据类型介绍&#xff1a; 1、整数类型&#xff1a; MySQL提供了多种整数…

聚观早报 |魅族21搭载超声波指纹2.0;华为长安成立新公司

【聚观365】11月28日消息 魅族21搭载超声波指纹2.0 华为长安成立新公司 OPPO Reno11 Pro本周首销 淘宝天猫推出系列AI工具 长城汽车计划全面进入欧洲市场 魅族21搭载超声波指纹2.0 魅族官方此前已宣布&#xff0c;将于11月30日召开“2023魅族秋季无界生态发布会”&#x…

【用unity实现100个游戏之17】从零开始制作一个类幸存者肉鸽(Roguelike)游戏3(附项目源码)

文章目录 本节最终效果前言近战武器控制近战武器生成升级增加武器伤害和数量查找离主角最近的敌人子弹预制体生成子弹发射子弹参考源码完结 本节最终效果 前言 本节紧跟着上一篇&#xff0c;主要实现武器功能。 近战武器 新增Bullet&#xff0c;子弹脚本 public class Bull…

Shell编程基础 – for循环

Shell编程基础 – for循环 Shell Scripting Essentials - for Loop 大多数编程语言都有循环的概念和语句。如果想重复一个任务数十次&#xff0c;无论是输入数十次&#xff0c;还是输出数十次&#xff0c;对用户来说都不现实。 因此&#xff0c;我们考虑如何用好Bash Shell编…

单片机BootLoader是咋回事?

BootLoader的定义&#xff1a; CPU进入APP之前运行的一小段程序代码就叫做BootLoader。它是由程序员编写的&#xff0c;作用是更新应用程序。这也就说明了只有BootLoader的单片机才可以升级。有的产品有升级的需要就需要BootLoader了。 单片机的启动过程可以这么叙述&#xff…

【C++】set/multiset/map/multimap

目录 一、关联式容器 1.1 树形结构的关联式容器 二、set 2.1 set的介绍 2.2 set的使用 2.2.1 set的构造 2.2.2 set的迭代器 2.2.3 set的容量函数 2.2.4 set的功能函数 2.2.5 set的使用举例 三、multiset 3.1 multiset的介绍 3.2 multiset的使用演示 四、map 4.1…

Linux内核--内存管理(三)物理内存分页机制--kmalloc及slub机制

一、引言 二、slub机制 ------>2.1、slub分配原理slub原理 ------>2.2、slub分配原理 ------>2.3、slub释放原理 ------>2.4、SLUB分配器 三、slub数据结构 ------>3.1、kmem_cache ------>3.2、kmem_cache_cpu ------>3.3、kmem_cache_node --…

线性表之队列

文章目录 主要内容一.队列1.队列的顺序存储代码如下&#xff08;示例&#xff09;: 2.队列的链式存储3.双端队列 总结 主要内容 队列 一.队列 队列是一种先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的线性数据结构&#xff0c;它具有两个基本操作&a…

什么是路由抖动?该如何控制

路由器在实现不间断的网络通信和连接方面发挥着重要作用&#xff0c;具有所需功能的持续可用的路由器可确保其相关子网的良好性能&#xff0c;由于网络严重依赖路由器的性能&#xff0c;因此确保您的路由器不会遇到任何问题非常重要。路由器遇到的一个严重的网络问题是路由抖动…

Java自学过程中的学习技巧与方法分享

问题&#xff1a;请解释一下SELECT语句在单表查询中的作用&#xff0c;并结合示例代码说明如何使用SELECT语句进行单表查询。 答案&#xff1a; 在数据库中&#xff0c;使用SELECT语句进行单表查询是非常常见和基础的操作。SELECT语句用于从数据库表中检索数据&#xff0c;可…

使用 watch+$nextTick 解决Vue引入组件无法使用问题

问题描述&#xff1a; 很多时候我们都需要使用第三方组件库&#xff0c;比如Element-UI&#xff0c;Swiper 等等。 如果我们想要在这些结构中传入自己从服务器请求中获取的数据就会出现无法显示的问题。 比如我们在下面的Swiper例子中&#xff0c;我们需要new Swiper 才能让…

【华为OD题库-043】二维伞的雨滴效应-java

题目 普通的伞在二维平面世界中&#xff0c;左右两侧均有一条边&#xff0c;而两侧伞边最下面各有一个伞坠子&#xff0c;雨滴落到伞面&#xff0c;逐步流到伞坠处&#xff0c;会将伞坠的信息携带并落到地面&#xff0c;随着日积月累&#xff0c;地面会呈现伞坠的信息。 1、为了…

mysql主从复制-redis集群扩容缩容、缓存优化(缓存更新策略、穿透,击穿,雪崩)、mysql主从搭建、django实现读写分离

基于Docker实现读写分离 1 redis集群扩容缩容 1.1 集群扩容 1.2 集群缩容 2 缓存优化 2.1 缓存更新策略 2.2 穿透&#xff0c;击穿&#xff0c;雪崩 3 mysql主从搭建 4 django实现读写分离 1 redis集群扩容缩容 1.1 集群扩容 # 6台机器&#xff0c;3个节点集群# 8台机器&am…

第12关 精通K8s下的Ingress-Nginx控制器:生产环境实战配置指南

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维&#xff0c;这节课带来k8s的流量入口ingress&#xff0c;作为业务对外服务的公网入口&#xff0c;它的重要性不言而喻&#xff0c;大家一定要仔细阅读&#xff0c;跟着博哥的教程一步步实操去理…