【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】
【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】
【LeetCode-面试算法经典-Java实现】【全部题目文件夹索引】
原题
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
题目大意
给定一个升序的单链表。将它转换成一颗高度平衡的二叉树
解题思路
  解法一:将单链表中的值存入一个数组中,通过数组来构建二叉树。算法时间复杂度是:O(n),空间复杂度是:O(n) 
  解法二:採用递归的方式。 
    (一)找中间结点,构建根结点。 
    (二)中间结点左半部分构建左子树, 
    (三)中间结点的右部分构建右子树 
  题採用另外一种解法 
代码实现
树结点类
public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}
算法实现类
public class Solution {
    public TreeNode sortedListToBST(ListNode head) {
        // 假设链表为空就直接返回null
        if (head == null) {
            return null;
        }
        // 链表仅仅有一个结点
        if (head.next == null) {
            return new TreeNode(head.val);
        }
        // 高速移动结点,每次移动两个位置
        ListNode fast = head.next.next;
        // 记录中间结点
        ListNode mid = head;
        // 找中间结点
        while (fast != null && fast.next != null) {
            mid = mid.next;
            fast = fast.next.next;
        }
        // 以中间结点的下一个结点作为根结点
        TreeNode root = new TreeNode(mid.next.val);
        // 构建右子树
        root.right = sortedListToBST(mid.next.next);
        // 记录链表要断开的点
        ListNode midNext = mid.next;
        // 断开单链表(会破坏原来单链表的结构)
        mid.next = null;
        // 构建左子树
        root.left = sortedListToBST(head);
        // 又一次将链表接好
        mid.next = midNext;
        // 返回结果
        return root;
    }
}
评測结果
点击图片,鼠标不释放。拖动一段位置。释放后在新的窗体中查看完整图片。
特别说明
欢迎转载,转载请注明出处【http://blog.csdn.net/derrantcm/article/details/47393027】
【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】的更多相关文章
- 109 Convert Sorted List to Binary Search Tree 有序链表转换二叉搜索树
		
给定一个单元链表,元素按升序排序,将其转换为高度平衡的BST.对于这个问题,一个高度平衡的二叉树是指:其中每个节点的两个子树的深度相差不会超过 1 的二叉树.示例:给定的排序链表: [-10, -3, ...
 - Leetcode109. Convert Sorted List to Binary Search Tree有序链表转换二叉搜索树
		
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定的有序链表: [-10 ...
 - 【LeetCode】109. Convert Sorted List to Binary Search Tree 解题报告(Python)
		
[LeetCode]109. Convert Sorted List to Binary Search Tree 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id ...
 - leetcode 108. Convert Sorted Array to Binary Search Tree 、109. Convert Sorted List to Binary Search Tree
		
108. Convert Sorted Array to Binary Search Tree 这个题使用二分查找,主要要注意边界条件. 如果left > right,就返回NULL.每次更新的 ...
 - 108. Convert Sorted Array to Binary Search Tree 109. Convert Sorted List to Binary Search Tree -- 将有序数组或有序链表转成平衡二叉排序树
		
108. Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascendin ...
 - [LeetCode] 109. Convert Sorted List to Binary Search Tree 把有序链表转成二叉搜索树
		
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
 - 【一天一道LeetCode】#109. Convert Sorted List to Binary Search Tree
		
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
 - Leetcode#109	Convert Sorted List to Binary Search Tree
		
原题地址 跟Convert Sorted Array to Binary Search Tree(参见这篇文章)类似,只不过用list就不能随机访问了. 代码: TreeNode *buildBST( ...
 - [LeetCode] 108. Convert Sorted Array to Binary Search Tree ☆(升序数组转换成一个平衡二叉树)
		
108. Convert Sorted Array to Binary Search Tree 描述 Given an array where elements are sorted in ascen ...
 - Convert Sorted List to Binary Search Tree——将链表转换为平衡二叉搜索树  &&convert-sorted-array-to-binary-search-tree——将数列转换为bst
		
Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...
 
随机推荐
- 安装PL/SQL Developer,链接本地64位Oracle
			
请参考: http://www.cnblogs.com/ymj126/p/3712727.html 或者 http://blog.csdn.net/cselmu9/article/details/80 ...
 - angular.fromJson(json)的简单示例
			
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
 - Struts2---ActionContext和ServletActionContext小结
			
转载自:http://www.cnblogs.com/tanglin_boy/archive/2010/01/18/1650871.html感谢原文作者的总结 1. ActionContext 在St ...
 - 基于类的通用视图(Class-based generic views)
			
在web开发中,最令人头痛的就是一遍又一遍的重复固定的模式.在解决了模板层面和模型层面的重复代码之痛之后,Django使用通用视图来解决视图层面的代码重复. 扩展通用视图 毫无疑问通用视图可以大幅度地 ...
 - 去除TB二合一页面弹窗
			
AdBlock插件 自定义AdBlock ###J_MMREDBOX_MASK 保存
 - c/c++: c++函数返回类型什么情况带const
			
c++ 函数的返回类型,包括const 什么时候起作用呢? 函数返回值不想其立即修改的. 例子如下,这是一个简单的避免产生隐形返回变量的方法,abc 的函数返回是引用,main函数中第10行,++ 操 ...
 - 无线网络发射器选址 (NOIP2014)(真·纯模拟)
			
原题传送门 好吧,如果说D1T1是纯模拟大水题 D2T1就是纯模拟略水题. 这道题首先我们要看一看数据范围.. 0<=n,m<=128 送分也不带这么送的吧.. 二维前缀和,前缀和,二次循 ...
 - 给notepad++加nppFtp插件连接ubuntu编写文本
			
打开notepad++的菜单栏中的插件,如果没有“插件管理”,去https://github.com/ashkulz/NppFTP/releases/tag/v0.27.2,下载对应的版本,将其解压后 ...
 - 原生JavaScript实现jQuery的hasClass,removeClass,addClass,toggleClass
			
介绍: 1.hasClass:判断DOM元素是否存在类. 2.addClass:为的DOM元素添加类. 3.removeClass:删除DOM元素的类. 4.toggleClass:如果DOM元素存在 ...
 - python--websocket数据解析
			
# websocket实现原理 ''' 1.服务端开启socket,监听ip和端口 2.客户端发送连接请求(带上ip和端口) 3.服务端允许连接 4.客户端生成一个随机字符串,和magic strin ...