LintCode 106-排序列表转换为二分查找树

原创 2017年01月03日 19:46:06

本人电子系,只为一学生。心喜计算机,小编以怡情。


给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树


思路:很容易想到了要每次取中,也很容易的想到了要用递归来做。
注意:使用ArrayList的subList要用List来定义。
如:List temp=new ArrayList();

  public TreeNode sortedListToBST(ListNode head) {  
        // write your code here

        if(head==null) return null;
        //链表转换成List,为了以后的subList与get容易一些
        //当然也可以不这样做,只是定位会比较麻烦
        List<Integer>  temp=new ArrayList<Integer>();
        while(head!=null)
        {
            temp.add(head.val);
            head=head.next;
        }
        //调用retree方法,构造二分查找树
        TreeNode ret=retree(temp);

        return ret;


    }
    public TreeNode retree(List<Integer> temp)
    {
        //当子链表长度不同时,mid的定位也不同
        int mid=0;
        if(temp.size()%2==0)
            mid=temp.size()/2-1;
        else {
            mid=temp.size()/2;
        }

        //注意mid的范围,要进行检查否则会报错
        if(mid<0||mid>=temp.size()) return null;
        //构造新树的结点
        TreeNode head=new TreeNode(temp.get(mid));
        //建立连接
        head.left=retree( temp.subList(0, mid));
        head.right=retree( temp.subList(mid+1, temp.size()));

        return head;
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

LintCode二分查找题总结

LC上二分查找那一章有这么些题: 二分查找的题经常用于考,因为它虽然看似简单,但其实要完全正确却不容易,很容易写出死循环的程序。一个二分查找的程序可以很容易判断出一个人功底扎不扎实。 45...
  • luoshengkim
  • luoshengkim
  • 2016年08月03日 15:53
  • 2076

LintCode 排序列表转换为二分查找树

排序列表转换为二分查找树  描述 笔记  数据  评测 给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 您在真实的面试...
  • qq_24369113
  • qq_24369113
  • 2017年03月22日 15:46
  • 496

排序列表转换为二分查找树

题目描述:给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 我们之前做过一道将排序数组转换为二分查找树的问题,详见:点击打开链接 将链表转换为二分查找树与上面这道题的基本思想一模...
  • guoziqing506
  • guoziqing506
  • 2016年04月21日 19:51
  • 1031

lintCode_二分查找

笔试面试算法题
  • Tina_yaoyao
  • Tina_yaoyao
  • 2015年10月28日 22:26
  • 1109

数据结构之二分查找树

二分查找树(也叫二叉查找树、二叉排序树)的提出是为了提供查找效率,之所以称为二分查找树,因为该二叉树对应着二分查找算法,查找平均的时间复杂度为o(logn),所以该数据结构的提出是为了提高查找效率。...
  • JXH_123
  • JXH_123
  • 2014年07月02日 20:52
  • 2287

不同的二叉查找树 II lintcode

给出n,生成所有由1...n为节点组成的不同的二叉查找树 您在真实的面试中是否遇到过这个题?  Yes 样例 给出n = 3,生成所有5种不同形态的二叉查找...
  • u014470581
  • u014470581
  • 2016年10月14日 10:25
  • 492

数据结构树之二分查找树

二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:...
  • mengsofts
  • mengsofts
  • 2014年04月08日 13:23
  • 4149

数据结构基础 查找 之 二分查找

二分查找又称折半查找,对排好序的数组,每次取这个数和数组中间的数进行比较,复杂度是O(logn)。本文在阐述二分查找算法思想的基础上给出递归、非递归以及STL三种方式的源码实现,现详述如下。...
  • u013630349
  • u013630349
  • 2015年07月28日 10:51
  • 1887

二分查找与判定树

二分查找是一种效率比较高的查找算法,但是它依赖于数组有序的存储,二分查找的过程可以用二叉树来形容描述:把当前查找区间的中间位置上的结点作为根,左子表和右子表中的结点分别作为根节点的左子树和右子树。由此...
  • gogoky
  • gogoky
  • 2016年05月10日 15:07
  • 4218

JAVA实现冒泡排序和二分查找

冒泡排序     冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有...
  • dreamsunday
  • dreamsunday
  • 2016年07月21日 10:46
  • 6580
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LintCode 106-排序列表转换为二分查找树
举报原因:
原因补充:

(最多只允许输入30个字)