Jason__Liang的博客

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

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

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


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


思路:很容易想到了要每次取中,也很容易的想到了要用递归来做。
注意:使用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;
    }
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jason__Liang/article/details/53997367
文章标签: LintCode Java
个人分类: LintCode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭