给定一个升序排序的数组,将其转化为平衡二叉搜索树(BST).
平衡二叉搜索树指树上每个节点 node 都满足左子树中所有节点的的值都小于 node 的值,右子树中所有节点的值都大于 node 的值,并且左右子树的节点数量之差不大于1
数据范围:0≤n≤100000数组中每个值满足 ∣val∣≤5000
进阶:空间复杂度 O(n) ,时间复杂度 O(n)
示例1
输入
[-1,0,1,2]
输出
{1,0,2,-1}
解析:
class Solution {
public:
TreeNode *sortedArrayToBST(vector<int> &num)
{
return ArrayToBST(num,0,num.size());
}
TreeNode *ArrayToBST(vector<int> &num,int begin,int end)
{
if(begin >= end)
return nullptr;
int middle = (end+begin)>>1;
TreeNode *root = new TreeNode(num[middle]);
root->left = ArrayToBST(num,begin,middle);
root->right = ArrayToBST(num,middle+1,end);
return root;
}
};