思路
将有序数组转换为平衡二叉搜索树。递归方法,每次选取数组中间元素作为根节点,左侧子数组构建左子树,右侧子数组构建右子树。不断二分数组确保树的高度平衡,时间复杂度为O(n)。
代码
cpp
class Solution {
private:
TreeNode* traversal(vector<int>& nums,int l, int r) {
if(l>r) return nullptr;
int m=l+((r-l)/2);
TreeNode* rr=new TreeNode(nums[m]);
rr->left=traversal(nums,l,m-1);
rr->right=traversal(nums,m+1,r);
return rr;
}
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
TreeNode* r=traversal(nums,0,nums.size()-1);
return r;
}