当前位置: 首页 > news >正文

Leetcode JAVA刷刷站(108)将有序数组转换为二叉搜索树

一、题目概述

二、思路方向 

       在Java中,要将一个已排序的整数数组转换为一个平衡的二叉搜索树(BST),你可以利用数组的中间元素作为树的根节点。这样,左子数组(根节点左侧的所有元素)可以递归地转换成左子树,而右子数组(根节点右侧的所有元素)可以递归地转换成右子树。由于数组已经排序,这种方法可以保证生成的二叉搜索树是平衡的。

三、代码实现 

class TreeNode {  int val;  TreeNode left;  TreeNode right;  TreeNode(int val) {  this.val = val;  }  
}  public class Solution {  public TreeNode sortedArrayToBST(int[] nums) {  if (nums == null || nums.length == 0) {  return null;  }  return sortedArrayToBSTHelper(nums, 0, nums.length - 1);  }  private TreeNode sortedArrayToBSTHelper(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 = sortedArrayToBSTHelper(nums, start, mid - 1);  // 递归构建右子树  root.right = sortedArrayToBSTHelper(nums, mid + 1, end);  return root;  }  public static void main(String[] args) {  Solution solution = new Solution();  int[] nums = {-10, -3, 0, 5, 9};  TreeNode root = solution.sortedArrayToBST(nums);  // 这里只是简单地检查根节点,实际中你可能需要更复杂的打印或遍历方法来验证树的结构  System.out.println("Root value: " + root.val);  // 注意:这里没有包含完整的树遍历逻辑,因为这会超出题目要求的范围  }  
}

执行结果: 

四、小结

       在这个示例中,sortedArrayToBST方法是公开的入口点,它接受一个整数数组nums并返回构建好的平衡二叉搜索树的根节点。sortedArrayToBSTHelper是一个私有辅助方法,它递归地处理数组的一部分,以构建树的子节点。

       注意,这个实现假设输入的数组nums不为空,并且已经按升序排列。如果数组可能为空或未排序,你需要在方法中添加适当的检查和处理逻辑。

       此外,为了验证树的结构,你可能需要实现一些树遍历方法(如中序遍历),但这部分超出了题目要求的范围。在上面的示例中,我们只是简单地打印了根节点的值来验证代码的执行。

 结语 

心生,种种魔生

心灭,种种魔灭

!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于SpringBoot+Vue+MySQL的的宠物商城网站
  • [C#] 基于 Token 的鉴权与签名机制详解 接口对接鉴权 token、sign(a=1b=2c=3d=4)、Base64、参数加密、MD5
  • 解释 JVM 的堆内存结构,并简述如何通过调整 JVM 参数来提高应用程序的性能 ?
  • 【C#生态园】构建完美的C#网络请求:深度剖析六大HTTP客户端库
  • 怎样查看电脑文件夹大小?文件夹数据丢失怎么找回
  • 【鼠鼠学AI代码合集#5】线性代数
  • 口语笔记——状语
  • mysql笔记3(数据库、表和数据的基础操作)
  • node.js、php、Java、python校园点餐与数据分析系统 校园食堂订餐系统(源码、调试、LW、开题、PPT)
  • 护肤产品如何推广吗
  • 通过EasyExcel设置自定义表头及设置特定单元格样式、颜色
  • OpenAI澄清:“GPT Next”不是新模型。
  • 完整指南:CNStream流处理多路并发框架适配到NVIDIA Jetson Orin (三) 代码编译、各种问题解决、代码修改
  • Oracle VM VirtualBox 下 Ubuntu22 虚拟机配置双网络
  • Ubuntu20.04+ros-noetic配置Cartographer
  • [译] 怎样写一个基础的编译器
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 【面试系列】之二:关于js原型
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Angular 2 DI - IoC DI - 1
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • EOS是什么
  • iOS编译提示和导航提示
  • java正则表式的使用
  • JS函数式编程 数组部分风格 ES6版
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • 从setTimeout-setInterval看JS线程
  • 多线程事务回滚
  • 码农张的Bug人生 - 初来乍到
  • 排序(1):冒泡排序
  • 前端面试之CSS3新特性
  • 浅谈Golang中select的用法
  • 使用parted解决大于2T的磁盘分区
  • 思维导图—你不知道的JavaScript中卷
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Spring第一个helloWorld
  • 阿里云ACE认证学习知识点梳理
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​Python 3 新特性:类型注解
  • # 透过事物看本质的能力怎么培养?
  • #pragma once与条件编译
  • $.ajax()方法详解
  • $.ajax,axios,fetch三种ajax请求的区别
  • $.each()与$(selector).each()
  • (+4)2.2UML建模图
  • (007)XHTML文档之标题——h1~h6
  • (C++17) std算法之执行策略 execution
  • (C语言)逆序输出字符串
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转)人的集合论——移山之道