108. Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
分析:将一个有序数组转化成平衡的BST,找到中值,作为根节点,再递归分别生成左子树与右子数
/**
* 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 {
void BST(vector
& nums, TreeNode* & root, int low, int high)
{
if(low>high)//此时数组为空
return;
if(low==high)
root=new TreeNode(nums[low]);
if(low==high-1)//数组只有两个数,建树,将较大的设为根节点,较小的设为左子节点,当然可以不同
{
root=new TreeNode(nums[high]);
TreeNode * l=new TreeNode(nums[low]);
root->left=l;
}else//当有>=3个数时,采用递归的方法
{
int mid=(low+high)/2;
root=new TreeNode(nums[mid]);//因为要求平衡BST,将中值设为根节点
BST(nums,root->left,low,mid-1);//由数组的左半部分生成左子树
BST(nums,root->right,mid+1,high);//由数组的右半部分生成右子树
}
}
public:
TreeNode* sortedArrayToBST(vector
& nums) {
int n=nums.size();
TreeNode* root;
BST(nums,root,0,n-1);
return root;
}
};