Problem :
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
Example:
**
Algorithm:
**
根据二叉平衡搜索树的特点,因为这个数组是有序的,所以可以把数组分成两半,左边一半世左子树,右边一半是右子树,中间的是根节点,然后对每一半的数组开始递归,最后只剩下一个数时开始回溯,可以确保是一个二叉平衡树,因为一直是对半分,所以左边和右边的高度差不会大于1
时间复杂度时n/2+n/4+……+1=O(n)
**
Code:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* BST(vector<int>& nums,int begin,int end) {
if(begin<=end)
{
TreeNode* root=new TreeNode(nums[(begin+end)/2]);
root->left=BST(nums,begin,(begin+end)/2-1);
root->right=BST(nums,(begin+end)/2+1,end);
return root;
}
else
return NULL;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
return BST(nums,0,nums.size()-1);
}
};