108. Convert Sorted Array to Binary Search Tree
一、问题描述
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
二、输入输出
三、解题思路
Binary Search Tree 二叉搜索树
- 定义为:是指一颗空树,或者具有如下性质的树:
- 若任意节点的左子树不为空,则左子树上所有节点的值均小于它的根节点值
- 若任意节点的右子树不为空,则右子树上所有节点的值均大于它的根节点值
- 任意节点的左右子树也分别为二叉搜索树 Binary Search Tree
- 没有键值相等的节点
Balanced Binary Tree
- 平衡二叉树指得是左右子树的高度差值的绝对值小于等于1
递归解法
- 要求将一个递增的数组转换成一个平衡二叉搜索树。首先找到根节点 len/2 然后左子树的节点是数组中改点的左半部分。右子树的节点是该数组中该节点右边的部分。可以使用递归的调用来完成左子树和右子树的创建
- 递归结束条件:当nums为空时,返回空;当nums中只有一个元素时,直接返回改节点即可
- 其实搞清了概念,这道题很简单。在树的题里面,递归使用的非常多,要注意。
/**
* 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() == 0)return nullptr;
if(nums.size() == 1)return new TreeNode(nums[0]);
size_t len = nums.size();
size_t mid = len / 2;
TreeNode * ret = new TreeNode(nums[mid]);
vector<int> left, right;
left.insert(left.begin(), nums.begin(), nums.begin()+mid);
right.insert(right.begin(), nums.begin()+mid+1, nums.end());
ret->left = sortedArrayToBST(left);
ret->right = sortedArrayToBST(right);
return ret;
}
};