算法学习 day23

2023-11-09

669. 修剪二叉搜索树

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案

所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

示例 1:

img

输入:root = [1,0,2], low = 1, high = 2
输出:[1,null,2]

示例 2:

img

输入:root = [3,0,4,null,2,null,null,1], low = 1, high = 3
输出:[3,2,null,1]

提示:

  • 树中节点数在范围 [1, 104]
  • 0 <= Node.val <= 104
  • 树中每个节点的值都是 唯一
  • 题目数据保证输入是一棵有效的二叉搜索树
  • 0 <= low <= high <= 104
递归解法
class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        //终止条件
        if(root == null) return root;
        //单层循环逻辑
        //当前值小于目标值,修剪左子树,返回右子树
        if(root.val < low) return trimBST(root.right,low,high);
        //反之
        if(root.val > high) return trimBST(root.left,low,high);

        //当前值符合范围,分别修建左右子树
        root.left = trimBST(root.left,low,high);
        root.right = trimBST(root.right,low,high);
        return root;
    }
}

108.将有序数组转换为二叉搜索树

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。

高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

示例 1:

img

输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

示例 2:

img

输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums严格递增 顺序排列
递归
  • 二叉搜索树按照中序(左根右)遍历,得到升序数组
  • 通过中间件节点切分得到根节点即可
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return sortedSubBST(nums,0,nums.length-1) ;
    }
    public TreeNode sortedSubBST(int[] nums,int start,int end) {
        if(start>end) return null;
        int mid = start + (end - start)/2;
        TreeNode root = new TreeNode(nums[mid]);
        root.left = sortedSubBST(nums,start,mid-1);
        root.right = sortedSubBST(nums,mid+1,end);
        return root;
    }
}

538.将二叉树搜索树转化为累加树

给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。

提醒一下,二叉搜索树满足下列约束条件:

  • 节点的左子树仅包含键 小于 节点键的节点。
  • 节点的右子树仅包含键 大于 节点键的节点。
  • 左右子树也必须是二叉搜索树。

**注意:**本题和 1038: https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tree/ 相同

示例 1:

img

输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]

示例 2:

输入:root = [0,null,1]
输出:[1,null,1]

示例 3:

输入:root = [1,0,2]
输出:[3,3,2]

示例 4:

输入:root = [3,2,4,1]
输出:[7,9,4,10]

提示:

  • 树中的节点数介于 0104 之间。
  • 每个节点的值介于 -104104 之间。
  • 树中的所有值 互不相同
  • 给定的树为二叉搜索树。
递归
  • 题意中的累加和理解为从大到小累加得出
  • 中序遍历的结果为从小到大,即升序,要想得到降序的数组,使用和中序相反的顺序遍历(右根左)
  • 此时根据递归三部曲
    • 参数和返回值为根节点
    • 终止条件,节点为null
    • 单层递归逻辑
      • 先遍历右子树,累加和->给右子节点赋值
      • 计算节点和
      • 最后遍历左子树
class Solution {
    int sum = 0 ;
    public TreeNode convertBST(TreeNode root) {
        if(root == null)return null;

        convertBST(root.right);
        sum += root.val;
        root.val = sum;
        convertBST(root.left);

        return root;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法学习 day23 的相关文章

  • 从数据框中按索引删除行

    我有一个数组wrong indexes train其中包含我想从数据框中删除的索引列表 0 63 151 469 1008 要删除这些索引 我正在尝试这样做 df train drop wrong indexes train 但是 代码失败
  • django_openid_auth TypeError openid.yadis.manager.YadisServiceManager 对象不是 JSON 可序列化

    I used django openid auth在我的项目上 一段时间以来它运行得很好 但今天 我测试了该应用程序并遇到了这个异常 Environment Request Method GET Request URL http local
  • 如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?

    我在 Cloud9 中使用 Python AWS CDK 并且我部署简单的 Lambda 函数那应该是发送 API 请求到 Atlassian 的 API当对象上传到 S3 存储桶时 也是由 CDK 创建的 这是我的 CDK 堆栈代码 fr
  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • Python模块可以访问英语词典,包括单词的定义[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 python 模块 它可以帮助我从英语词典中获取单词的定义 当然有enchant 这可以帮助我检查该单词是否存在于英语中
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • 使用 Python pandas 计算调整后的成本基础(股票买入/卖出的投资组合分析)

    我正在尝试对我的交易进行投资组合分析 并尝试计算调整后的成本基础价格 我几乎尝试了一切 但似乎没有任何效果 我能够计算调整后的数量 但无法获得调整后的购买价格有人可以帮忙吗 这是示例交易日志原始数据 import pandas as pd
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • Seaborn Pairplot 图例不显示颜色

    我一直在学习如何在Python中使用seaborn和pairplot 这里的一切似乎都工作正常 但由于某种原因 图例不会显示相关的颜色 我无法找到解决方案 因此如果有人有任何建议 请告诉我 x sns pairplot stats2 hue
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 如何为每个屏幕添加自己的 .py 和 .kv 文件?

    我想为每个屏幕都有一个单独的 py 和 kv 文件 应通过 main py main kv 中的 ScreenManager 选择屏幕 设计应从文件 screen X kv 加载 类等应从文件 screen X py 加载 Screens
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x
  • Python 无法使用套接字绑定我的外部/公共 IP 地址,给出错误但是当使用本地 IP 地址时,错误不会显示

    这是出现主要错误的代码 与我的本地 IP 的绑定将起作用 s bind 192 168 1 4 port 与我的公共 IP 的绑定失败并出现以下错误 s bind 99 99 99 99 port WinError 10049 请求的地址在
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1

随机推荐

  • gin框架27--自定义 HTTP 配置

    gin框架27 自定义 HTTP 配置 介绍 案例 说明 介绍 本文主要介绍如何自定义HTTP配置 在gin框架中可以直接使用 http ListenAndServe 来实现 案例 源码 package main import github
  • react中,useState异步更新带来的问题,怎么解决

    React 的 useState 是异步更新状态的 但是有时候我们需要在状态更新后执行一些操作 如果直接使用 setState 可能会导致状态的更新不及时 此时可以使用以下几种解决方案 使用 useEffect 来监听状态的变化 并在其中执
  • WeOpen Good 开源公益计划正式启动!聚开源智慧·行科技向善

    PART 1 缘起和初心 8 15 20 当看到这些数字 你第一时间会想到什么 少 不足一提 亦或是什么呢 1 我们生活的地球上 有超过 70 亿人口 其中 10 亿以上的人 也就是相当于总人口约 15 的人有某种形式的残疾 2 世界范围内
  • linux的自旋锁struct spinlock_t的使用

    在linux中提供了一些机制用来避免竞争条件 最简单的一个种就是自旋锁 例如 当一个临界区的数据在多个函数之间被调用时 为了保护数据不被破坏 可以采用spinlock来保护临界区的数据 当然还有一个就是信号量也是可以实现临界区数据的保护的
  • 直接把软件界面做成游戏界面。CEGUI 专用游戏界面开发库。

    下载 http www cegui org uk wiki index php Downloads 更多中文教程 http www ispinel com 2010 05 26 971 首先感谢李素颙同学的热心和耐心指导 做游戏或者计算机图
  • 对应用数据开发还有疑惑?看这篇就够了!数据存储、管理,通通掌握!

    原文 对应用数据开发还有疑惑 看这篇就够了 数据存储 管理 通通掌握 点击链接查看更多技术内容 数据管理可以做什么 应用数据的持久化怎么实现 如何实现数据库加密 在开发应用进行应用数据的处理时 您是否也会有这些疑问呢 现在 我们推出了更为清
  • Access Token(访问令牌)学习

    Access Token 访问令牌 是一种用于身份验证和授权的令牌 在软件开发中 访问令牌通常用于访问受限资源或执行特定操作 Access Token 通常由身份验证服务器颁发 以授权客户端应用程序代表用户访问受保护的资源 当用户进行身份验
  • opencv笔记之--图片模糊操作和锐化操作

    一 模糊操作 usr bin env python coding utf 8 import cv2 as cv import numpy as np def blur demo image dst cv blur image 15 1 cv
  • go换源

    Windows 版本 SETX GO111MODULE on go env w GOPROXY https goproxy cn direct SETX GOPROXY https goproxy cn direct Linux 版本 ec
  • 部署Zabbix企业级分布式监控

    1 定义 1 1 监控定义 通过一个友好的界面进行浏览整个网站所有的服务器状态 可以在Web前端方便的查看监控数据 可以回溯寻找事故发生时系统的问题和报警情况 分类 传统 zabbix nagois 云原生 prometheus 1 2 z
  • 基于tcpdump实例讲解TCP/IP协议

    前言 虽然网络编程的socket大家很多都会操作 但是很多还是不熟悉socket编程中 底层TCP IP协议的交互过程 本文会一个简单的客户端程序和服务端程序的交互过程 使用tcpdump抓包 实例讲解客户端和服务端的TCP IP交互细节
  • 【深度】谭铁牛院士谈人工智能发展新动态

    来源 Frontiers 11月25日 模式识别与人工智能学科前沿研讨会在自动化所召开 会上 谭铁牛院士做 人工智能新动态 报告 回顾了近代以来历次科技革命及其广泛影响 并根据科学技术发展的客观规律解释了当前人工智能备受关注的深层原因 报告
  • Git工作流程:如何在团队中协作?

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 G
  • 《Happy Birthday》游戏开发记录(送给朋友的小礼物)

    游戏开发的学习记录 项目 Happy Birthday 一个小小小游戏 基于unity给朋友做的一个生日小礼物 之前都是礼物加信 今年想用自己的技能 把信的内容以另一种方式送给她 但在做这个的时候 也学到一些新的东西 所以把这个也记录下来了
  • ieee-explore/springer文献免费下载办法

    http ieeexplore ieee org document xxxxxxx 改为 http ieeexplore ieee org sci hub tw document xxxxxxx 即可免费下载 是哈萨克斯坦女黑客搞的 见下文
  • 一文带你看懂 MySQL 存储引擎

    本文目录 1 MySQL体系结构 2 存储引擎介绍 3 MySQL 存储引擎特性 4 MySQL 有哪些存储引擎 5 了解 MySQL 数据存储方式 6 MySQL存储引擎介绍 6 1 CSV存储引擎 6 1 1 CSV介绍 6 1 2 使
  • c++中的list容器讲解

    文章目录 1 list的介绍及使用 1 1 list的介绍 1 2 list的使用 1 2 1 list的构造 1 2 2 list iterator的使用 1 2 3 list capacity 1 2 4 list element ac
  • vscode python3安装 xlwt_python EXCEL自动化办公(一)xlrd、xlwt、xlsxwriter安装过程

    目前在python中实现EXCEL办公自动化过程中 经常用到两个包 xlrd和xlwt 在某些博主或者资料中指出xlwt有bug 目前不清楚是否被修复 我们这里保险起见 再安装另一个包xlsxwriter 其中xlrd作为excel读取 x
  • IDEA访问不了官网?看过来!(超详!超细!)

    IDEA访问不了官网 显示 无法访问此网址 超详细 导语 IDEA访问不了 话不多说 实战为主 作者 变优秀的小白 Github YX XiaoBai 爱好 Americano More Ice QQ交流群 new 811792998 注
  • 算法学习 day23

    669 修剪二叉搜索树 给你二叉搜索树的根节点 root 同时给定最小边界low 和最大边界 high 通过修剪二叉搜索树 使得所有节点的值在 low high 中 修剪树 不应该 改变保留在树中的元素的相对结构 即 如果没有被移除 原有的