Leetcode-每日一题【109.有序链表转换二叉搜索树】

news2024/10/6 2:27:16

题目

给定一个单链表的头节点  head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。

示例 1:

 

输入: head = [-10,-3,0,5,9]
输出: [0,-3,9,-10,null,5]
解释: 一个可能的答案是[0,-3,9,-10,null,5],它表示所示的高度平衡的二叉搜索树。


示例 2:

输入: head = []
输出: []

提示:

  • head 中的节点数在[0, 2 * 104] 范围内
  • -105 <= Node.val <= 105

解题思路

前置知识

二叉搜索树又称二叉排序树,具有以下性质:

  • 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
  • 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
  • 它的左右子树也分别为二叉搜索树

注意:二叉搜索树中序遍历的结果是有序的

知道了什么是二叉搜索树,我们怎样将有序链表转换为二叉搜索树呢? 

1.要想将有序链表转换为二叉搜索树,我们先观察一下二叉搜索树会发现根节点的左子树上的节点均小于根节点,而根节点又子树上的节点均大于根节点,那么在有序链表中能满足这个条件的节点就是我们链表的中间节点,所以我们要找出链表的中间节点(详细讲解请看【876.链表的中间结点】)同时我们要在查找中间节点的过程中设置一个pre节点来存储我们中间节点的前一个节点。

2.找到中间节点low和中间节点的前一个结点pre后,我们将链表分隔为中间节点、中间节点之前的链表、中间节点之后的链表、

3.然后设置一个TreeNode root 让他的值等于中间节点 low 的值,再递归的去转换中间节点之前的链表和中间节点之后的链表。最后返回 root 即可。

代码实现

class Solution {
    public TreeNode sortedListToBST(ListNode head) {
        if(head == null){
            return null;
        }
        if(head.next == null){
            TreeNode root = new TreeNode(head.val);
            return root;
        }
        ListNode fast = head;
        ListNode low = head;
        ListNode pre = null;
        while(fast != null && fast.next != null){
            fast = fast.next.next;
            pre = low;
            low = low.next;
        }
        pre.next = null;
        ListNode rightList = low.next;
        TreeNode root = new TreeNode(low.val);
        root.right = sortedListToBST(rightList);
        root.left = sortedListToBST(head);
        return root;

    }
}

测试结果

 

 

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

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

相关文章

【Linux基础】gcc编译器

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…

【IMX6ULL - psplash应用】修改uboot启动阶段的背景颜色

文件路径&#xff1a;psplash/psplash-colors.h 修改框起来的这两个宏定义就可以改变底部颜色了&#xff0c;参数代表是RGB的16进制颜色

Linux 支持 U盘 NTFS 文件系统格式

Linux 支持 U盘 NTFS 文件系统格式 1、在线&#xff08;可以连接外网&#xff09;方式&#xff1a; 1.1、RHEL/CentOS/Anolis/openEuler yum install ntfs-3g1.2、Debian/Ubuntu/Deepin apt install ntfs-3g2、离线方式 下载 ntfs-3g 安装包&#xff0c;离线环境安装 ntfs…

算法通关村第一关--链表青铜挑战笔记

算法通关村第一关–链表青铜挑战笔记 开始时间&#xff1a;2023年7月16日20:45:26 链表 什么是链表&#xff0c;链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#x…

解决通过request.getParam()方法获取到的值为null的问题~

我们想获取前端表单提交的数据&#xff0c;并在控制台输出&#xff0c;但如下所示控制台输出的值均为null 原因在于&#xff1a; 表单中的name与getParam方法中名称不一致的问题 如下所示为表单内容&#xff1a; 而在getParam方法中我们是根据username和password获取的&#…

【LLM】Langchain使用[四](评估、代理)

note 评估目的&#xff1a;检验LLM是否达到验收标准&#xff1b;分析改动对于LLM应用性能的影响 思路&#xff1a;利用语言模型和链&#xff0c;辅助评估 代理&#xff1a; 代理能方便地将LLM连接自己的信息来源&#xff08;数据&#xff09;、API等PythonREPLTool工具&#x…

WSL2安装CUDA

WSL2安装CUDA 在WSL里面不用安装显卡驱动&#xff0c;显卡驱动必须要提前在Windows系统里面安装好&#xff0c;安装好后相应库文件会自动映射到WSL里面 进入网站 找到自己需要的版本&#xff0c;我这里是CUDA 11.7.1&#xff0c;点击进入详细页面 依次选择 L i n u x → x 86…

IP扫描工具

什么是高级 IP 扫描仪 高级 IP 扫描程序是网络中必不可少的工具&#xff0c;使管理员能够跟踪网络地址空间。在提供要扫描的 IP 地址范围时&#xff0c;高级 IP 扫描程序会借助网络扫描协议按顺序检查该范围内的每个 IP&#xff0c;扫描后&#xff0c;高级 IP 扫描程序工具可查…

【MongoDB实战】数据备份与恢复

场景&#xff1a; 需求&#xff1a; 解决方案&#xff1a; 步骤&#xff1a; Stage 1&#xff1a;【生产环境】修改备份文件映射 Stage 2&#xff1a;【生产环境】重新构建mongodb Stage 3&#xff1a;【客户环境】修改备份文件映射&#xff0c;同 Stage 1 Stage 4&#…

python接口自动化(四十)- logger 日志 - 下(超详解)

简介 按照上一篇的计划&#xff0c;这一篇给小伙伴们讲解一下&#xff1a;&#xff08;1&#xff09;多模块使用logging&#xff0c;&#xff08;2&#xff09;通过文件配置logging模块&#xff0c;&#xff08;3&#xff09;自己封装一个日志&#xff08;logging&#xff09;类…

Stable Diffusion配置要求,显卡推荐

Stable Diffusion 是一款流行的人工智能图像生成器&#xff0c;您可以在自己的 PC 上运行。但是运行Stable Diffusion的最低规格是多少&#xff0c;哪些组件最重要&#xff1f; Stable Diffusion需要什么 PC 硬件&#xff1f; Stable Diffusion最关键的一个组件是显卡 (GPU)。…

LaTex 中的Beamer使用

LaTex 中的Beamer使用 Beamer beamer 中通过frame 来控制每一页的内容&#xff0c;其与编写常用的LaTex文稿基本没有区别 titlepage \title[Short Title]{My Presentation} \subtitle{An Introduction to LaTeX Beamer} \author{River Chandler} \institute{Sichuan Universi…

国科大杭州高等研究院

2021年底的我还没决定开始考研 &#xff0c;过完年才确定开始考研&#xff0c;开学以后才开始学习&#xff0c;此时距离22年底考试时间差不多十个月的样子。 2022年开始正式学习&#xff0c;2 2 408&#xff0c;对于我来说内容挺多挺难的&#xff0c;我英语不太好&#xff0c;以…

懒人自动化生成e2e测试文件:JSON => playwright

前言 本工具实现的是&#xff1a;使用简单的 JSON 配置&#xff0c;生成可执行的 playwright UI 测试文件。 然后通过项目内已经配置好的 playwright 配置实现 UI 测试。 工具工作流程&#xff1a; 期望达到的目的是&#xff1a; ✅ 基础页面&#xff08;进入页面&#xff0…

加密保SSL超安通配版

今天收到几家公司网络IT经理询问&#xff1a;“要买“加密保SSL超安通配版”问有没有&#xff1f;” 这里特别强调一下&#xff01; “加密保SSL超安通配版”这不是国产SSL证书&#xff0c;不是国产SSL证书&#xff0c;属于套牌PKI类型非CA机构官方产品&#xff01; 这是经销…

cuda_11.6.1_510.47.03_linux.run

cuda_11.6.1_510.47.03_linux.run Installing the latest CUDA toolkit cuda_11.6.1_510.47.03_linux.run Download Installer for Linux Ubuntu 20.04 x86_64 cuda_11.6.1_510.47.03_linux.run

【Spring】Spring更简单的读取和存储对象---使用注解

目录 1.Spring的存储对象------存储Bean对象 1.前置工作&#xff0c;配置扫描路径 2.添加注解存储Bean对象 1.Controller&#xff08;控制器存储&#xff09; 2.service&#xff08;服务存储&#xff09; 3.Repository&#xff08;仓库存储&#xff09; 4.Component&…

二叉树展开为链表

给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1&…

CVE-2023-1454注入分析复现

简介 JeecgBoot的代码生成器是一种可以帮助开发者快速构建企业级应用的工具&#xff0c;它可以通过一键生成前后端代码&#xff0c;无需写任何代码&#xff0c;让开发者更多关注业务逻辑。 影响版本 Jeecg-Boot<3.5.1 环境搭建 idea 后端源码&#xff1a; https://git…

【Java SpringBoot Starter】开发一个自己的SpringBoot Starter组件,应该怎么写,需要什么配置

【Java SpringBoot Starter】开发一个自己的SpringBoot Starter组件&#xff0c;应该怎么写&#xff0c;需要什么配置 目录 1. 自定义的Starter&#xff0c;需要的Configuration 类 2. .properties文件的配置&#xff0c;或者yml文件的配置内容&#xff0c;注入bean对象中 …