108. 将有序数组转换为二叉搜索树
题目
-
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
python
题解
- 题目给出的“有序数列”帮助我们满足了“二叉搜索树”的条件,只用关注下标,不用关注值。
- 思路:每次把一组数最中间的位置,作为树的头拎起来,剩下部分平均分两份就行,要是出多来一个数就分配给左or右,然后递归左子树、右子树
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
def make_tree(start_index, end_index): #只和长度有关
#首先判定我们的区间是否合理,即left_index要<=right_index
#当相等时,只有root会产生,不会产生左右小树
if start_index > end_index:
return None
mid_index = (start_index + end_index)//2
root = TreeNode(nums[mid_index]) #做一个小树的root
root.left = make_tree(start_index,mid_index-1)#递归左子树
root.right = make_tree(mid_index+1, end_index)#递归右子树
return root #做好的小树
return make_tree(0,len(nums)-1)
javascript
题解
var sortedArrayToBST = function(nums) {
const make_tree=(start_index, end_index)=>{
// 递归结束条件:如果起始索引大于结束索引,返回null
if (start_index > end_index) return null
let mid_index=Math.floor((start_index+end_index)/2)// 计算中间索引
let root = new TreeNode(nums[mid_index])// 创建根节点
// 递归构建左子树和右子树
root.left=make_tree(start_index, mid_index-1)
root.right=make_tree(mid_index+1, end_index)
return root
}
//传入数组的起始和结束索引
return make_tree(0,nums.length-1)
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人