【二叉树】将有序数组转换为二叉搜索树

7.PNG

8.PNG

解题思路:递归解决

因为数组是升序排列,那么一棵树的根结点就应该是其最中间的结点

递归结束条件:numsSize=0,返回NULL

1.找到数组中中间的数(numsSize/2),以其为val创建根结点

2.然后以中间数为分割,得到左右两个数组。左边数组个数为(numsSize/2),右边数组个数为(numsSize -numsSize/2 -1)

3.将根结点的左右孩子递归设置为sortedArrayToBST递归左右数组的结果

4.返回根节点

struct TreeNode* sortedArrayToBST(int* nums, int numsSize){
    //递归结束条件:numsSize=0,返回NULL
    if(!numsSize)
        return NULL;

    struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    root->val = nums[numsSize/2];
    root->left = sortedArrayToBST(nums, numsSize/2);
    root->right = sortedArrayToBST(nums + numsSize/2 + 1, numsSize - numsSize/2 -1);
    return root;
}

6.PNG