描述
给定一个升序排序的数组,将其转化为平衡二叉搜索树(BST).
平衡二叉搜索树指树上每个节点 node 都满足左子树中所有节点的的值都小于 node 的值,右子树中所有节点的值都大于 node 的值,并且左右子树的节点数量之差不大于1
数据范围:0 \le n \le 100000≤n≤10000,数组中每个值满足 |val| \le 5000∣val∣≤5000
进阶:空间复杂度 O(n)O(n) ,时间复杂度 O(n)O(n)
例如当输入的升序数组为[-1,0,1,2]时,转化后的平衡二叉搜索树(BST)可以为{1,0,2,-1},如下图所示:
或为{0,-1,1,#,#,#,2},如下图所示:
返回任意一种即可。
示例
输入:
[-1,0,1,2]
返回值:
{1,0,2,-1}
输入:
[]
返回值:
{}
方法1:递归
Java实现
public class Solution {
public TreeNode sortedArrayToBST (int[] num) {
// write code here
int n = num.length;
return build(num, 0, n - 1);
}
public TreeNode build(int[] num, int l, int r) {
if (l > r) return null;
int mid = l + r >> 1;
TreeNode root = new TreeNode(num[mid]);
root.left = build(num, l, mid - 1);
root.right = build(num, mid + 1, r);
return root;
}
}