https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
把有序数组转为二叉查找树,本质上就是对数组做二分查找,中间元素就是根;然后在对左右两个分区迭代二分查找。本题可以用递归函数来解。c++代码和python代码如下,空间复杂度是O(logn),时间复杂度是O(n)。
class Solution {
public:
TreeNode * sortedArrayToBST(vector<int>& nums) {
if (nums.empty())
return NULL;
return helper(nums, 0, nums.size());
}
TreeNode * helper(vector<int>& nums, int start, int end)
{
if (nums.empty() || start >= end)
return NULL;
TreeNode * res = new TreeNode(nums[(start+end)/2]);
res->left = helper(nums, start, (start + end) / 2);
res->right = helper(nums, (start + end) / 2 + 1, end);
return res;
}
};
class Solution:
def sortedArrayToBST(self, nums):
if nums is None or len(nums) == 0:
return None
return self.helper( nums, 0, len(nums)-1 )
def helper(self, nums, start, end):
if start > end:
return None
result = TreeNode(nums[(int)((start + end)/2)])
result.left = self.helper( nums, start, (int)((start + end)/2)-1 )
result.right = self.helper( nums, (int)((start + end)/2)+1, end )
return result