leetcode 108 将有序数组转换为二叉搜索树
题意
将升序排序的数组,转换为一棵平衡二叉搜索树。
思路
我没啥思路。看题解写的这题。
代码
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
return helper ( nums, 0, nums.size() - 1 );
}
TreeNode* helper( vector<int> &nums, int left, int right ) {
if ( left > right ) {
return nullptr;
}
int mid = ( left + right ) / 2;
TreeNode* root = new TreeNode( nums[mid] );
root -> left = helper( nums, left, mid - 1 );
root -> right = helper( nums, mid + 1, right );
return root;
}
};
分析
平衡的二叉搜索树就是尽可能让 bst 低一些。给一个向量,并且是按照升序排列的,二叉搜索树的中序遍历也是按照升序排列的。所以可以递归写一遍二叉树的中序遍历。选择根节点的时候选择中间靠左的节点,整数除法可以保证每次选择中间靠左的节点。bst 的查找类似于二分查找,递归做一遍就可以构建出来了。
最后
我一定可以把简单和中等算法题写出来!!