题意
将升序排序的数组,转换为一棵平衡二叉搜索树。
思路
我没啥思路。看题解写的这题。
代码
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 的查找类似于二分查找,递归做一遍就可以构建出来了。
最后
我一定可以把简单和中等算法题写出来!!