leetcode_108. 将有序数组转换为二叉搜索树

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

给定有序数组: [-10,-3,0,5,9],

一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
     0
    /  \
  -3  9
  /    /
-10 5

解析:题目要求高度平衡,并且要求是二叉搜索树。
根据二叉搜索树的性质以及题目给定的升序有序数组,可以得出,对于数组中一个给定的区间,这个区间中间的数字一定是这个区间所转换的树的根节点,而这个数字左侧的其他数字对应构成根节点的左子树,右侧同理构成右子树。
再根据高度平衡的要求,可以得出,对于一个给定的区间,为了实现高度平衡,必须从中间切分以实现左右数字数量大致相等以实现高度平衡。
因此得出算法。
构造递归函数,每次选取当前区间中间的数字构造一个节点,并递归的调用自身以构造左右子树。当区间不存在时返回空指针。

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return makenode(nums,0,nums.size()-1);
    }
    
    TreeNode* makenode(vector<int>& nums,int start,int end){
        if(start>end) return nullptr;
        int mid = start + (end-start)/2;
        TreeNode* cur = new TreeNode(nums[mid]);
        cur->left = makenode(nums,start,mid-1);
        cur->right = makenode(nums,mid+1,end);
        return cur;
    }
};
发布了112 篇原创文章 · 获赞 0 · 访问量 343

猜你喜欢

转载自blog.csdn.net/qq_37292201/article/details/103983296