和我一起在LeetCode刷题吧(每天一题LeetCode)

分类标签:二叉树             

难易度:简单

题目描述:

给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。

示例:

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

          0

        / \

      -3  9

      /  /

    -10  5

思路:完全二叉树+递归+二分法

1.题目要求创建一个高度最小的二叉搜索树,则构建的结果要往完全二叉树上面靠拢;

2.利用二分法寻找数组中的中间数据作为根节点;

3.利用递归的方法分别寻找到构建二叉树的左子树和右子树。

代码:

struct TreeNode *helper(int *nums,int left,int right)  //二分法寻找根节点

{

  if(left>right)

      return NULL;

    struct TreeNode *res=(struct TreeNode *)malloc(sizeof(struct TreeNode));

    int mid=(left+right)/2;

    res->val=nums[mid];

    res->left=helper(nums,left,mid-1);

    res->right=helper(nums,mid+1,right);

    return res;

}

struct TreeNode* sortedArrayToBST(int* nums, int numsSize){

if (nums==NULL)

    return NULL;

    return helper(nums,0,numsSize-1);

}

运行结果:


运行结果


运行占用时间和空间

你可能感兴趣的:(和我一起在LeetCode刷题吧(每天一题LeetCode))