关闭

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

标签: LintCodeJava
158人阅读 评论(0) 收藏 举报
分类:

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


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


思路:很容易想到了要每次取中,也很容易的想到了要用递归来做。
注意:使用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;
    }
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10476次
    • 积分:732
    • 等级:
    • 排名:千里之外
    • 原创:66篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类