题目描述:给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST)
题目示例:
输入:[-1,0,1,2] 输出:[1,0,2,-1]
解题思路:二叉搜索树的特点就是左子树都小于根节点,右子树都大于根节点。因此我们可以采用二分法寻得数组中点作为根节点,左半边构建左子树,右半边构建右子树。同时依据示例可以判断数组为偶数个时,要选取右半边的第一个为根节点。
代码实现如下:
TreeNode* sortedArrayToBST(vector<int>& num) {
// write code here
if(num.size()<1)
return nullptr;
int halfSize = num.size()/2;
TreeNode *head = new TreeNode(num[halfSize]);
vector<int> num2(num.begin(),num.begin()+halfSize);
vector<int> num3((num.begin()+halfSize+1),num.end());
head->left = sortedArrayToBST(num2);
head->right = sortedArrayToBST(num3);
return head;
}