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 排序列表转换为二分查找树

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

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

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

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

给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 样例     2 1->2->3 => / \ 1 3 ...
  • wwe4023
  • wwe4023
  • 2017年07月11日 20:21
  • 287

二分查找树转化为排序的循环双链表

一:题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 例如对于下面的二分查找树: small pointer 其实也就是指向左...
  • LaoJiu_
  • LaoJiu_
  • 2016年03月07日 16:16
  • 569

Lintcode 将二叉查找树转换为双链表

将二叉查找树转换成双链表描述 笔记 数据 评测 将一个二叉查找树按照中序遍历转换成双向链表。您在真实的面试中是否遇到过这个题? Yes 样例 给定一个二叉查找树:4 / \ 2...

lintcode,将二叉查找树转换成双链表

将一个二叉查找树按照中序遍历转换成双向链表。 样例 给定一个二叉查找树: 4 / \ 2 5 / \ 1 3 返回 12345。解题思路:类似中序遍历的过程...
  • zsjmfy
  • zsjmfy
  • 2016年12月18日 11:28
  • 340

动态规划_最优二分查找树

一、什么是最优二叉查找树 最优二叉查找树: 给定n个互异的关键字组成的序列K=,且关键字有序(k1 图一显示了给定上面的概率分布pi、qi,生成的两个二叉查找树的例子。图二就是在这种情况下一棵最...
  • llwszjj
  • llwszjj
  • 2013年11月19日 19:24
  • 1787

二叉树之二分查找树

说明: 运行环境:linux 书籍:《数据结构与算法分析》 1.binary tree is an tree only 1 or 2 child 2.binary search tree le...

二分查找树(Binary Search Tree)

对于查找这个操作,相信大家都不陌生 顺序查找 ( Sequential Searching )最直接的查找便是顺序查找 ( Sequential Searching ),其实就是从头到尾遍历一遍,看有...

递归一题三解-将二分查找树(BST)转化成循环双链表(DLL)

题目来自leetcode: 已知一个BST(binary search tree), 将其原地转化成一个循环的排序过的双链表(circular sorted double linked list)。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LintCode 106-排序列表转换为二分查找树
举报原因:
原因补充:

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