和将链表变成高度平衡二叉树类似,只是查找中间节点的时候更方便一些。
/** * Definition for binary tree *
struct TreeNode
{ * int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/class Solution
{
public:
TreeNode *sortedArrayToBST(vector&num) {
return toBST(num,0,num.size());
}
TreeNode *toBST(vector &num,int head,int end){
if(head==end)return NULL;
int mid=(head+end)/2;
TreeNode *root=new TreeNode(num[mid]);
root->left=toBST(num,head,mid);
root->right=toBST(num,mid+1,end);
return root;
}
};