有序链表转换二叉搜索树

2023-11-14

力扣入口 109.有序链表转化二叉搜索树

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

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

思路加图解

思路1:

class Solution {
    //获取中间结点,左闭右开 方便表示head,null
    public ListNode getMidNode(ListNode left, ListNode right){
        ListNode fast = left;
        ListNode slow = left;
        while(fast != right && fast.next != right){
            fast = fast.next.next;
            slow = slow.next;
        }
        return slow;
    }
    //递归构建二叉搜索树 左闭右开 方便表示head,null
    public TreeNode buildTree(ListNode left,ListNode right){

        if(left == right){
            return null;
        }
        //获取中间结点
        ListNode mid = getMidNode(left,right);
        //构建根结点
        TreeNode root = new TreeNode(mid.val);
        //构造左子树
        root.left = buildTree(left,mid);
        //构造右子树
        root.right = buildTree(mid.next,right);
        //返回根结点
        return root;
    }
    public TreeNode sortedListToBST(ListNode head) {
        return buildTree(head,null);
    }

}

思路2:

 

class Solution {

    ListNode globalHead;

    public TreeNode sortedListToBST(ListNode head) {
        globalHead = head;
        int length = getLength(head);
        return buildTree(0, length - 1);
    }

    public int getLength(ListNode head) {
        int ret = 0;
        while (head != null) {
            ++ret;
            head = head.next;
        }
        return ret;
    }
    //中序遍历,构造二叉树
    //
    public TreeNode buildTree(int left, int right) {
        if (left > right) {
            return null;
        }
        int mid = (left + right + 1) / 2;
        TreeNode root = new TreeNode();
        root.left = buildTree(left, mid - 1);
        root.val = globalHead.val;
        globalHead = globalHead.next;
        root.right = buildTree(mid + 1, right);
        return root;
    }
}

最难不过坚持!

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

有序链表转换二叉搜索树 的相关文章

随机推荐

  • PermissionError: [Errno 13] Permission denied: ‘./MNIST_Dataset_Loader/dataset/train-images-idx3-uby

    在使用从github上下载的代码时报错 PermissionError Errno 13 Permission denied MNIST Dataset Loader dataset train images idx3 ubyte 解决办法
  • 【计算机网络系列】网络层⑫:虚拟专用网和网络地址转换NAT

    虚拟专用网和网络地址转换NAT 虚拟专用网 由于IP地址的紧缺 一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数 考虑到互联网并不很安全 一个机构内也并不需要把所有的主机接入到外部的互联网 实际上 在许多情况下 很多主机主要还是
  • 物联网的相关概念总结(逐渐更新)

    引言 本文主要总结了与物联网协议栈相关的概念 1 网络带宽 Network Bandwidth 网络带宽是指在单位时间 一般指的是1秒钟 内能传输的数据量 基本单位 bits per second 简写为bps 带宽的单位有 bps Kbp
  • 智能车图像处理12-进阶篇4--环岛辅助判断条件

    前言 希望大家多多点赞评论收藏哦 不懂的地方评论区留言就好 这篇文章主要讲述智能车图像处理中环岛辅助判断相关内容 一 图解分析 思路讲解 环岛辅助条件用于决定是否进入环岛判断函数 下面的辅助条件主要有两个方面 1 环岛所在边在赛道上必须有两
  • 学习笔记:Linux文件权限

    一般情况下 系统里的文件夹都是755权限 允许所有用户进入文件夹 一般情况下 root用户创建的文件夹权限是755 创建的文件权限是644 一般情况下 普通用户创建的文件夹权限是775 创建的文件权限是664 目录权限 可执行的操作 r l
  • 放苹果-递归

    include
  • java基础(二)循环语句及字符串的处理

    public class Test02 public static void main String args TODO 自动生成的方法存根 int sum 0 for int i 1 i lt 100 i 从1打印到100 System
  • 【leetcode】----102二叉树的层序遍历

    102二叉树的层序遍历 给你一个二叉树 请你返回其按 层序遍历 得到的节点值 即逐层地 从左到右访问所有节点 示例 二叉树 3 9 20 null null 15 7 3 9 20 15 7 返回其层次遍历结果 3 9 20 15 7 BF
  • C#与C++交互系列:C#调用C++的三种方式

    参考 https zhuanlan zhihu com p 30746354 内容 目前 Net平台中托管环境调用非托管环境有三种方法 P Invoke 针对原生c方法调用 C Interop 针对托管C C CLI 使用的方法 COM I
  • Java的学习路线(非常完整)

    Java 是一种跨平台的 面向对象的高级编程语言 主要用来进行网站后台开发 也就是服务器端开发 或者动态网站开发 Java 是全球最受欢迎的编程语言之一 在世界编程语言排行榜 TIOBE 中 Java 一直霸占着前三名 有好多年甚至都是第一
  • KDD2023丨预训练论文合集

    ACM SIGKDD 国际数据挖掘与知识发现大会 简称KDD 会议始于1989年 是数据挖掘领域历史最悠久 规模最大的国际顶级学术会议 也是首个引入大数据 数据科学 预测分析 众包等概念的会议 每年吸引了大量数据挖掘 机器学习 大数据和人工
  • Error attempting to get column ‘create_time‘ from result set. Cause: java.sql.SQLFeatureNotSupporte

    错误 org springframework dao InvalidDataAccessApiUsageException Error attempting to get column create time from result set
  • 使用arthas在线诊断flink的那些事

    最近在使用arthas诊断工具 诊断java服务的一些问题 突然想到能不能使用arthas诊断flink的jobManager和taskManager呢 答案是可以的 采用javaagent 在flink启动jobmanager和taskM
  • QT 程序架构 及 Ui 来龙去脉

    ifndef MAINWINDOW H define MAINWINDOW H include
  • 好用的IDEA插件之Alibaba Java Coding Guidelines

    一 简介 Alibaba Java Coding Guidelines是一款基于阿里巴巴Java开发手册的IDEA插件 它提供了一系列的代码检查和自动修复功能 帮助开发者遵循阿里巴巴的Java编码规范 该插件支持的检查类型包括命名规范 代码
  • 使用Sentencepiece +CNN进行文本分类

    Sentencepiece是google开源的文本Tokenzier工具 其主要原理是利用统计算法 在语料库中生成一个类似分词器的工具 外加可以将词token化的功能 对比开源的分词器 它会将频繁出现的字符串作为词 然后形成词库进行切分 所
  • 清明上河图30亿像素_清明上河图高清下载

    清摹本清明上河图高清全图 一亿像素 是为了方便众多学者们研究品评清明上河图的资源 小编这里给大家带来的是过亿像素的清摹本清明上河图高清全图 画质好到想假的一样 第一眼看到小编觉得以前看的清明上河图都是假的 如果你有需要的话 那就快来IT猫扑
  • 图片素材网站

    七大壁纸网站满足所有分辨率需求 如今手机电脑都是1080p起步 偏高端的2k 高端的4k都逐渐进入普通大众的接受范围 而电视机近两年不是4k都不好意思拿出手 虽然电视4k在今年这个时候对普通人来说也并不实用 我经常就为了找一些分辨率高的壁纸
  • 排序算法-【Java实现】-【桶排序、冒泡排序、快速排序、插入排序】

    排序算法 Java实现 桶 冒泡 快速 归并 插入排序 排序算法演示地址 https www cs usfca edu galles visualization ComparisonSort html 桶排序 顾名思义 将数组分到有限数量的
  • 有序链表转换二叉搜索树

    力扣入口 109 有序链表转化二叉搜索树 给定一个单链表 其中的元素按升序排序 将其转换为高度平衡的二叉搜索树 本题中 一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 思路加图解 思路1 class So