美文网首页和我一起在LeetCode刷题吧我的大学
和我一起在LeetCode刷题吧(每天一题LeetCode)

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

作者: 北斗星君 | 来源:发表于2020-02-23 16:32 被阅读0次

    分类标签:二叉树             

    难易度:简单

    题目描述:

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

    示例:

    给定有序数组: [-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)

        本文链接:https://www.haomeiwen.com/subject/pmijqhtx.html