108. 将有序数组转换为二叉搜索树
题目描述
Given an array where elements are sorted in ascending order,convert it to a height balanced BST.
/**
* 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<int> &num) {
return sortedArrayToBSTCore(num,0,num.size()-1);
}
//注意这个递归核心函数接口的设计问题
//由于递归递推时涉及到使用一定范围内的数组元素构造树
//而对于数组,我们可以用一对下标来表示范围,递归的终止条件
//可以依据这对下标进行设计
TreeNode* sortedArrayToBSTCore(vector<int> &num,int start,int end)
{
if(start > end)
return nullptr;
//注意mid = start+(end-start)/2的意义
//令 x = [end-(start+1)+1]/2 = (end-start)/2
//[end-(start+1)+1]为除了第一个元素,数组剩余的元素个数
//mid划分成的前后半部分元素个数为:
//a = 1(start)+|x|(向下取整)(前半部分包含mid)
//b = |x|(向上取整)
//而|x|(向下取整) == |x|(向上取整) 或者
//|x|(向下取整)+1 == |x|(向上取整)
//所以a==b或者a=b+1
int mid = start+(end-start)/2;
TreeNode * root = new TreeNode(num[mid]);
root->left = sortedArrayToBSTCore(num,start,mid-1);
root->right = sortedArrayToBSTCore(num,mid+1,end);
return root;
}
};