leetcode108Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
这个题目使用递归和二分即可,一直寻找数组的中点,作为根节点,将数组截为两半,分别递归调用,前一半的结果保存为左节点,后半结果保存为右节点,如果数组中只剩2个数,即第二个大数做根节点,小数为其左节点,若数组中只有一个数,直接返回该节点。具体代码如下。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
if (nums.size() >= 3)
{
TreeNode * root = new TreeNode(nums[nums.size() / 2]);
vector<int> l(nums.begin(), nums.begin() + nums.size() / 2);
vector<int> r(nums.begin() + nums.size() / 2 + 1, nums.end());
root->left = sortedArrayToBST(l);
root->right = sortedArrayToBST(r);
return root;
}
else if (nums.size() == 2)
{
TreeNode * root = new TreeNode(nums[1]);
TreeNode * left = new TreeNode(nums[0]);
root->left = left;
return root;
}
else if (nums.size() == 1)
{
TreeNode * root = new TreeNode(nums[0]);
return root;
}
}
};