zoukankan      html  css  js  c++  java
  • Java递归加上二分搜索将有序数组转化为平衡二叉树2

    二分查找的例子:为下文做铺垫:

    c++:

    lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

    upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

    class Solution {
    public:
    int searchInsert(vector<int>& nums, int target) {
    return lower_bound(nums.begin(),nums.end(),target)-nums.begin();
     }
    };

    java:

    class Solution {
    public int searchInsert(int[] nums, int target) {
    return toBST(nums,0,nums.length-1,target);
    }
    public int toBST(int[]nums,int left,int right,int target)
    {
    if(left>right)return left;
    int mid=(int)(left+right)/2;
    if(target==nums[mid])return mid;
    if(target>nums[mid])return toBST(nums,mid+1,right,target);
    if(target<nums[mid])return toBST(nums,left,mid-1,target);
    return mid;
    }
    }

    -------------------->Java递归加上二分搜索将有序数组转化为平衡二叉树

    class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
    return ToBST(nums,0,nums.length-1);
    }
    public static TreeNode ToBST(int nums[],int left,int right){
    if(left>right)return null;//定义的二分区间为[left,right],无法进行继续递归,直接退出
    int mid = (int)(left+right)/2;//二分中值
    TreeNode root = new TreeNode(nums[mid]);
    root.left = ToBST(nums,left,mid-1);//注意mid-1 对左半部分进行递归
    root.right = ToBST(nums,mid+1,right);//注意mid+1 对右半部分进行递归
    return root;
    }
    }

  • 相关阅读:
    明治meltykiss食后感
    纪念我11月12日,广州移动一面
    《孔XXXX》
    UDP编程 System.Net.Sockets.SocketException (0x80004005): 在其上下文中,该请求的地址无效。
    《诈欺猎人》
    MonkeyImage模块功能详解
    MonkeyDevice模块功能详解
    MonkeyRunner及MonkeyRunner模块简介
    MonkeyServer的使用及自动化
    Monkey工具脚本功能详解
  • 原文地址:https://www.cnblogs.com/z2529827226/p/11746445.html
Copyright © 2011-2022 走看看