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

LeetCode热题100--108. 将有序数组转换为二叉搜索树--简单

1. 题目

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

示例 1:
在这里插入图片描述
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
在这里插入图片描述

示例 2:
在这里插入图片描述
输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

2. 题解

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode sortedArrayToBST(int[] nums) {return dfs(nums,0,nums.length - 1);}private TreeNode dfs(int[] nums, int lo, int hi){if(lo>hi){return null;}int mid = lo + (hi - lo) / 2;TreeNode root = new TreeNode(nums[mid]);root.left = dfs(nums,lo,mid - 1);root.right = dfs(nums,mid+1,hi);return root;}
}

3. 解析

出自:简单递归,🤷‍♀️ 必须秒懂!

// 定义二叉树节点类,包含整数值、左右子节点指针
public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}class Solution {// 主方法:接收有序数组,返回构建好的BST根节点public TreeNode sortedArrayToBST(int[] nums) {// 调用递归辅助方法,传入数组和初始边界(整个数组范围)return dfs(nums, 0, nums.length - 1);}// 递归方法:在子数组nums[lo..hi]范围内构建BSTprivate TreeNode dfs(int[] nums, int lo, int hi) {// 递归终止条件:当左边界超过右边界时返回空节点if (lo > hi) {return null;}// 计算中间索引(避免整数溢出的安全写法)int mid = lo + (hi - lo) / 2;// 以中间元素值创建根节点TreeNode root = new TreeNode(nums[mid]);// 递归构建左子树(左半部分数组)root.left = dfs(nums, lo, mid - 1);// 递归构建右子树(右半部分数组)root.right = dfs(nums, mid + 1, hi);// 返回当前构建完成的子树根节点return root;}
}
http://www.dtcms.com/a/351177.html

相关文章:

  • 【Lua】题目小练11
  • Ansible 自动化运维工具:介绍与完整部署(RHEL 9)
  • 【软考论文】论领域驱动开发方法(DDD)的应用
  • CentOS 7服务器初始化全攻略:从基础配置到安全加固
  • AI应用--接口测试篇
  • Maya绑定基础:驱动关键帧的使用
  • C# .NET支持多线程并发的压缩组件
  • 视频创作者如何用高级数据分析功能精准优化视频策略
  • 红色文化与前沿科技的融合:VR呈现飞夺泸定桥的震撼历史场景​
  • LWIP协议栈
  • Java项目-苍穹外卖_Day3-Day4
  • MyBatis-Flex:一个支持关联查询的MyBatis
  • android vehicle
  • SOME/IP-SD协议含配置选项键值信息的报文示例解析
  • 贝叶斯优化提升化学合成反应效率(附源码)
  • 如何将数据从vivo手机传输到另一部vivo手机
  • 《高并发场景下数据一致性隐疾的实战复盘》
  • Coze Studio开源版:AI Agent开发平台的深度技术解析- 入门篇
  • 深度学习篇---LeNet-5网络结构
  • iOS 开发中的 UIStackView 使用详解
  • Linux-服务器初始化
  • RHEL8.6环境下批量验证服务器凭据并配置Ansible免密管理全流程
  • 用wp_trim_words函数实现WordPress截断部分内容并保持英文单词完整性
  • Ansible 文件管理与 Jinja2 模板全解析:从模块应用到动态配置生成
  • Ansible核心技巧:循环条件与错误处理
  • nginx代理 flink Dashboard、sentinel dashboard的问题
  • HarmonyOS之深入了解装饰器
  • 服务器初始化流程***
  • Rust 符号体系全解析:分类、应用与设计意图
  • CentOS 7 升级 OpenSSL 3.5.1 的详细教程