108. 将有序数组转换为二叉搜索树
分析
-
确定递归终止条件
- 如果当前范围内左边界
l
大于右边界r
,返回nullptr
,表示没有节点
- 如果当前范围内左边界
-
递归构造子树
- 找到当前范围的中点
mid
,该点的值作为当前子树的根节点 - 递归调用构建左子树,范围为
[l, mid - 1]
- 递归调用构建右子树,范围为
[mid + 1, r]
- 找到当前范围的中点
-
返回构造的根节点
- 根据中点值创建一个新的节点,连接左子树和右子树,返回该节点作为当前子树的根节点
时间复杂度
- 递归次数:每次递归划分数组为两半,总体复杂度为
O(logn)
层 - 每层处理复杂度:每层需要处理数组范围,整体为
O(n)
总时间复杂度 O(n)
空间复杂度
递归栈空间:递归深度为 O(logn)
C++代码
|
|