BST(binary search tree)即: 二分搜索树
顾名思义, 这种树特别适合二分查找, 因为该树的所有左子树的节点都比根节点的值小, 所有右子树都比根节点的值大。
leetcode 108题:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST。
解题思路:数组最中间的值将数组分割成两部分, 左边的都比中间的值小, 右边的都比中间的值大;数组中间的值就是根节点的值; 然后建立左右子树时,依次递归即可。 结束条件, 如果数组的大小只剩1了,就直接建立一个节点; 如果数组大小为0, 则返回一个空。
代码:
TreeNode* sortedArrayToBST(vector<int>& nums)
{
if (nums.size() == 1) {
return new TreeNode(nums[0]);
}
if (nums.empty()) {
return NULL;
}
TreeNode* root = new TreeNode(nums[nums.size()/2]);
vector<int> left(nums.begin(), nums.begin() + nums.size()/2);
vector<int> right(nums.begin() + nums.size()/2 + 1, nums.end());
root->left = sortedArrayToBST(left);
root->right = sortedAarrayToBST(right);
return root;
}