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

news2026/4/2 19:08:39

前言

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

内容

一、最大二叉树

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:=0
    for 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.coloradmin.cn/o/1263422.html

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

相关文章

如何运用AppLink平台中的数据连接器组件

AppLink平台组件组成 AppLink平台组件分成三个板块触发事件组件、基础组件和数据连接器 数据连接器组件里面有10个组件&#xff0c;目前也在不断新增更多的数据连接器&#xff0c;那他们在AppLink平台里的原理、触发动作以及怎么使用呢&#xff1f;接下来用MySQL和TimescaleD…

Text-to-SQL小白入门(九)InstructGPT论文:教你如何训练ChatGPT

论文概述 InstructGPT和ChatGPT 的训练流程基本一致 &#xff0c;ChatGPT是改进后的InstructGPT&#xff0c;比如InstructGPT是基于GPT-3训练&#xff0c;而ChatGPT是基于GPT-3.5训练。 基本信息 英文标题&#xff1a;Training language models to follow instructions with h…

【鸿蒙应用ArkTS开发系列】- 选择图片、文件和拍照功能实现

文章目录 前言创建多媒体Demo工程创建MediaBean 实体类创建MediaHelper工具类API标记弃用问题动态申请多媒体访问权限实现选择图片显示功能打包测试 前言 在使用App的时候&#xff0c;我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件&#xff0c;那在鸿蒙…

当TinyMCE富文本编辑器遇到Vue3+nuxt+ts项目,分享引入成功案例及过程中踩的那些坑

文章目录 前言遇到的坑插入上传图片插件上传图片请求与返回值处理本地文件引入报错解决源码 前言 如果你的前端项目技术栈使用的是Vue3nuxtts&#xff0c;并且老大让你集成一下那个传说中非常丝滑的TinyMCE富文本编辑器&#xff0c;那么恭喜你和我一样中大奖了。 网上找了好久…

uniapp 导航分类

商品分类数据&#xff0c;包括分类名称和对应的商品列表点击弹出 列表的内容 展示效果如下&#xff1a; 代码展示 ①div部分 <view class"container"><view class"menu-bar"><view class"menu"><view class"menu-sc…

CSDN最新最全python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

经过之前的学习铺垫&#xff0c;我们尝试着利用pytest框架编写一条接口自动化测试用例&#xff0c;来厘清接口自动化用例编写的思路。 我们在百度搜索天气查询&#xff0c;会出现如下图所示结果&#xff1a; 接下来&#xff0c;我们以该天气查询接口为例&#xff0c;编写接口测…

C语言——字符函数和字符串函数(上)

在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了方便操作字符和字符串&#xff0c;C语⾔标准库中提供了⼀系列库函数&#xff0c;接下来我们就学习⼀下这些函数。 一、 字符分类函数 C语⾔中有⼀系列的函数是专⻔做字符分类的&#xff0c;也就是⼀个字…

[含泪解决]OSError: [Errno 99] Cannot assign requested address__踩坑记录——app.py绑定IP失败

踩坑记录下。 是这个样子的&#xff0c;前几天帮别人部署Python的Flask项目到云服务器上&#xff0c;然后在 app.run(host"xxx.xxx.xxx.xxx",port8080) 这行代码中&#xff0c;xxx.xxx.xxx.xxx代表我的IP地址&#xff0c;port代表我的端口号。 然后不是要部署到服…

Layui框架弹出框form表单中单选按钮状态不刷新

1、问题描述 如下图&#xff1a;当我们点击编辑按钮的时候&#xff0c;实现如果性别(stu_sex)的值为0男生被选中&#xff0c;如果性别的值为1&#xff0c;女生被选中。但是在使用Layui框架的过程中&#xff0c;发现性别的单选按钮无法实现刷新&#xff0c;使用不正常。 1.1、…

PLC:200smart

PLC&#xff1a;200smart 第十章、数据类型、数据存储1、数据类型1.1、有符号数1.2、有符号数 2、传送指令 第十一章、比较指令、整数、浮点数的运算1、比较指令1、运算指令1.1、浮点数运算1.2、整数运算 第十章、数据类型、数据存储 1、数据类型 数据类型分为两大类 无符号数…

k8s部署jenkins

1.先决条件 1.因为国内的容器镜像加速器无法实时更新docker hub上的镜像资源.所以可以自己进行jenkins的容器镜像创建,. 2.这里用到了storageClass k8s的动态制备.详情参考: k8s-StoargClass的使用-基于nfs-CSDN博客 3.安装docker服务.(用于构建docker image) 2.构建jenki…

使用docker-compose优雅部署nacos

查看代码中引入nacos版本 在应用的pom.xml中搜索nacos关键字&#xff0c;找到相关的nacos依赖 点击以来左边的图标&#xff0c;找到依赖管理器中的pom.xml&#xff0c;并全局搜索nacos&#xff0c;即可找到对应的nacos客户端版本 使用docker-compose部署nacos version: 3s…

React Native 更换淘宝镜像提升包下载速度

React Native 更换淘宝镜像提升包下载速度 每次运行项目的时候都是卡在包下载的命令上&#xff0c;每次一等就要 1h20m 极度崩溃&#xff0c;那是因maven镜像源为Google导致无法正常下载。 那么我们就可以切换maven镜像源&#xff0c;方法如下&#xff1a; 找到项目下的**/an…

20分钟拥有自己的ChatGPT4,高效低成本,小白必看

准备工作 1、准备一个3.5的账号 2、一张虚拟卡 开始步骤 从ChatGPT第一版发布到现在&#xff0c;还不到一年的时间中&#xff0c;可是它使用的GPT架构已经从3.5版本进化到现在的4.0版本&#xff0c;随之而来的是其能力的极大提升。下面是GPT-4在其官网的介绍中的一句话&…

C++基础 -8- 函数重载

函数重载格式(图片代码段呈现) #include "iostream"using namespace std;void rlxy(int a) {cout << "int a"<< endl; }void rlxy(char a) {cout << "char a"<< endl; }int main() {rlxy(99);rlxy(c); }函数重载的依据…

Redis 主从架构,Redis 分区,Redis哈希槽的概念,为什么要做Redis分区

文章目录 Redis 主从架构redis replication 的核心机制redis 主从复制的核心原理过程原理Redis集群的主从复制模型是怎样的&#xff1f;生产环境中的 redis 是怎么部署的&#xff1f;机器是什么配置&#xff1f;你往内存里写的是什么数据&#xff1f;说说Redis哈希槽的概念&…

Pytest:让测试断言变得轻松愉快!

前言 断言是完整的测试用例中不可或缺的因素&#xff0c;用例只有加入断言&#xff0c;将实际结果与预期结果进行比对&#xff0c;才能判断它的通过与否。 unittest 框架提供了其特有的断言方式&#xff0c;如&#xff1a;assertEqual、assertTrue、assertIn等&#xff0c;py…

Win7 SP1 x64 Google Chrome 字体模糊

1 打开 Google Chrome &#xff0c;地址栏输入 chrome://version/ &#xff0c;字体模糊。 2 Microsoft Update Catalog 搜索现在更新 kb2670838 &#xff0c;安装&#xff0c;重启电脑。 3 打开 Google Chrome&#xff0c;地址栏输入 chrome://version/ &#xff0c;字体正常。…

Vue和React配置解决跨域,proxy代理两步搞定

Vue配置&#xff1a; 第一步&#xff1a; 找到 vite.config.js 文件 进行如下代码配置 import { defineConfig } from "vite"; import vue from "vitejs/plugin-vue"; export default defineConfig({plugins: [vue()],server: {/*** /api 是代理标识*/p…

Python入门05 print函数

目录 1 Python中的内置函数2 print函数介绍3 print函数的用途总结 1 Python中的内置函数 Python中内置了很多函数&#xff0c;我们可以直接调用&#xff0c;以下是一些常见的函数&#xff1a; abs()&#xff1a;返回一个数的绝对值。all()&#xff1a;判断一个可迭代对象中的…