一次AC,很常规的递归调用。
class Solution {
public:
TreeNode *sortedArrayToBST(vector<int> &num) {
//递归算法,取中间数为根节点,两边的数组递归调用构造左子树和右子树
if(num.empty())//如果为空,则返回空子树
return NULL;
TreeNode *root;
if(num.size()==1)//如果只有一个结点,则直接初始化结点返回
{
root=new TreeNode(num[0]);
return root;
}
int mid;
mid=num.size()/2;
root=new TreeNode(num[mid]);
root->left=sortedArrayToBST(num,0,mid-1);
root->right=sortedArrayToBST(num,mid+1,num.size()-1);
return root;
}
private:
TreeNode *sortedArrayToBST(vector<int> &num,int m,int n)//m,n分别为起始下标,终点下标
{
if(n<m)//元素为空
return NULL;
TreeNode *root;
if(n==m)//只有一个元素
{
root=new TreeNode(num[n]);
return root;
}
int mid;
mid=m+(n-m)/2;
root=new TreeNode(num[mid]);
root->left=sortedArrayToBST(num,m,mid-1);
root->right=sortedArrayToBST(num,mid+1,n);
return root;
}
};