【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

最新文章

  1. PHP 操作MySQL———来自copy
  2. hdu1880
  3. JSON--List集合转换成JSON对象
  4. task_struct
  5. Tomcat教程
  6. 140724夏训.txt
  7. 基于Log4net插件
  8. HDU 1008 u Calculate e
  9. 第二次项目冲刺(Beta阶段)--第五天
  10. vue2入门之vue-cli
  11. 团队作业4——第一次项目冲刺(Alpha版本) Day 1
  12. Jmeter并发测试
  13. 细说java系列之注解
  14. 本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动
  15. 转:jdk动态代理实现
  16. C语言: 从 CodeBlocks 到 Microsoft Visual Studio 2017
  17. Linux文件系统命令 lsof
  18. 从初始化列表和构造函数谈C++的初始化机制
  19. C# 使用Queue<T>代替递归算法遍历树
  20. 04python while循环语句

热门文章

  1. Tomcat学习笔记(五)
  2. win2008服务器信任问题
  3. vue2.0 v-tap简洁(漏)版 (只解决300ms问题)
  4. linux低权限执行高权限
  5. glxgears刷新只有60FPS解决办法
  6. array数据初始化
  7. 开发API完成,写个文档
  8. AC日记——The Street codechef March challenge 2014
  9. 利用Lambda获取类中属性名称
  10. web前端到底是什么?有前途吗