Convert Sorted Array to Binary Search Tree
Q:给定一个已排序的数组,将它转换成一个平衡的二叉查找树。
A:Divide and conquer。为了达到一个平衡的二叉树,数组的中间元素做为root,然后对数组的左右两个部分分别生成新的子树,分别作为root的左右孩子。
时间复杂度:O(n)
空间复杂度:无额外开销
TreeNode *buildTree(vector<int> &num,int begin,int end)
{
if(begin<=end)
{
int middle = begin + (end - begin)/2;
TreeNode *root = new TreeNode(num[middle]);
root->left = buildTree(num,begin,middle-1);
root->right = buildTree(num,middle+1,end);
return root;
}else
return NULL;
}
TreeNode *sortedArrayToBST(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
return buildTree(num,0,num.size()-1);
}
浙公网安备 33010602011771号