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中只有一个元素时,直接返回改节点即可其实搞清了概念,这道题很简单。在树的题里面,递归使用的非常多,要注意。
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;
}
};