1.题目
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
给一个有序数组,将其转换为一个高度平衡二叉搜索树
2.分析
BST的特点是左节点<根结点<右节点
左右子树平衡的话,尽可能两边的元素个数相近。所以每次选择数组中间的数作为根结点,左边元素分配到左子树,右边的元素分配到右子树。
在一个博客看到这个动图,很形象:
3.代码
递归
TreeNode* constructBST(vector<int>& nums, int start, int end) {
if (start > end)
return NULL;
int mid = start + (end - start) / 2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = constructBST(nums, start, mid - 1);
root->right = constructBST(nums, mid + 1, end);
return root;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
if (nums.empty())
return NULL;
return constructBST(nums, 0, nums.size() - 1);
}