LeetCode42 - 将有序数组转换为二叉搜索树
📝 题目描述
题目链接:将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树。
二叉搜索树:左子树上所有节点的值都小于根节点的值;右子树上所有节点的值都大于根节点的值;左右子树也分别为二叉搜索树。
平衡二叉树:该树所有节点的左右子树的高度相差不超过 1。
示例:
示例 1:
1 | 输入:nums = [-10,-3,0,5,9] |
示例 2:
1 | 输入:nums = [1,3] |
提示:
1 <= nums.length <= 10^4-10^4 <= nums[i] <= 10^4nums 按 严格递增 顺序排列
💡 解题思路
方法一:中序遍历
题目所给的数组其实就是二叉搜索树的中序遍历,我们很容易想到使用二分法 + 递归构建平衡二叉搜索树。
- 首先使用二分法选择中间节点
middle作为根节点; - 对于左子树
[left, middle - 1],使用相同方法得到其节点指针; - 对于右子树
[middle + 1, right],使用相同方法得到其节点指针;
当 left > right 时,递归终止。
🔧 代码实现
1、中序遍历
1 | class Solution { |
📊 复杂度分析
1、中序遍历
- 时间复杂度:,其中 n 是数组的长度。每个数字只访问一次。
- 空间复杂度:,其中 n 是数组的长度。空间复杂度不考虑返回值,因此空间复杂度主要取决于递归栈的深度,递归栈的深度是 。
🎯 总结
- 核心思想:能够想到二分法很重要,想好边界条件也很重要。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 很多时候不懂事!