【问题描述】[中等]

【解答思路】

1. 分治 快慢指针

复杂度

class Solution {public TreeNode sortedListToBST(ListNode head) {return buildTree(head, null);}public TreeNode buildTree(ListNode left, ListNode right) {if (left == right) {return null;}ListNode mid = getMedian(left, right);TreeNode root = new TreeNode(mid.val);root.left = buildTree(left, mid);root.right = buildTree(mid.next, right);return root;}public ListNode getMedian(ListNode left, ListNode right) {ListNode fast = left;ListNode slow = left;while (fast != right && fast.next != right) {fast = fast.next;fast = fast.next;slow = slow.next;}return slow;}
}
2. 分治 + 中序遍历优化

复杂度

class Solution {ListNode globalHead;public TreeNode sortedListToBST(ListNode head) {globalHead = head;int length = getLength(head);return buildTree(0, length - 1);}public int getLength(ListNode head) {int ret = 0;while (head != null) {++ret;head = head.next;}return ret;}public TreeNode buildTree(int left, int right) {if (left > right) {return null;}int mid = (left + right + 1) / 2;TreeNode root = new TreeNode();root.left = buildTree(left, mid - 1);root.val = globalHead.val;globalHead = globalHead.next;root.right = buildTree(mid + 1, right);return root;}
}

【总结】

1. 前中后序遍历变化的是[中]的位置,左到右的顺序不改变

前序遍历 中左右
中序遍历 左中右
后续遍历 左右中

2.二叉搜索树 关键 找到中位数
3.相关题目

[Leetcode][第108题][JAVA][将有序数组转换为二叉搜索树][二分法][递归]
转载链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/solution/you-xu-lian-biao-zhuan-huan-er-cha-sou-suo-shu-1-3/

[Leetcode][第109题][JAVA][有序链表转换二叉搜索树][分治][快慢指针][中序遍历]相关推荐

  1. LeetCode(109):有序链表转换二叉搜索树

    Medium! 题目描述: 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: ...

  2. LeetCode 109. 有序链表转换二叉搜索树(快慢指针+递归)

    1. 题目 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 来源:力扣(LeetC ...

  3. 【算法】有序链表转换二叉搜索树和从中序与后序遍历序列构造二叉树Java解答参考

    三道算法题 1.有序链表转换二叉搜索树 Java代码参考 2.从中序与后序遍历序列构造二叉树 Java代码参考 3.移除元素 Java代码参考 1.有序链表转换二叉搜索树 给定一个单链表,其中的元素按 ...

  4. ( “树” 之 BST) 109. 有序链表转换二叉搜索树 ——【Leetcode每日一题】

    二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 109. 有序链表转换二叉搜索树 给定一个单链表的头节点 head ,其中的元素 按升序排序 , ...

  5. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  6. Java实现 LeetCode 109 有序链表转换二叉搜索树

    109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...

  7. 109. 有序链表转换二叉搜索树

    链接:109. 有序链表转换二叉搜索树 题解:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/so ...

  8. 有序链表转换二叉搜索树

    109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...

  9. 数据结构与算法--力扣109题将有序双向链表转换为二叉搜索树

    将有序数组转换为二叉搜索树 近一年都比较关注算法相关的知识,也刷了不少题,之前的文章中大多也是算法相关的文章,但是感觉每次遇到树相关的题型都不能应对自如,因此还是有必要在相关知识上下功夫,因此有此次总 ...

最新文章

  1. vSphere 5.0系列之二 vSphere Client的安装
  2. PHP函数之日期时间函数date()使用详解
  3. java语言for模板_java版的模板语言
  4. 读取SSDT表和原函数地址
  5. STL 之search,search_n,sort,binary_search
  6. 蓝桥杯JAVA省赛2013-----B------4(黄金连分数)
  7. 广度优先遍历类似于二叉树的_二叉树的各种遍历方法的简单解释
  8. Viewport3D 类Viewport3D 类Viewport3D 类
  9. UNITY 之FixedUpdate
  10. 酸奶小妹升级成酸奶妈妈了!
  11. tomcat内存溢出,性能优化配置讲解
  12. 电商中,订单号的生成方法
  13. 尚硅谷-SpringBoot1.5.9(已过时,直接学2)
  14. 基于STM32单片机的远程智能浇花花盆GSM短信浇水补光方案原理图程序设计
  15. new创建类对象与直接定义的区别
  16. IAR配色方案及配置方法
  17. 一键生成所有接口的文档 Swagger + springBoot
  18. 解决在KDE桌面环境WebStorm不能输入中文问题
  19. 过年帮同学做Windows 7/8系统的心得
  20. 大胆预测一波:23年软件测试行业的趋势及前景

热门文章

  1. select * 和select 所有字段的区别
  2. [推荐] TechNet 广播 SQL Server 2000完结篇
  3. saltstack部署java应用失败无日志——CICD 部署
  4. No field gDefault in class Landroid/app/ActivityManagerNative
  5. 中考物理可不可以用计算机,不能用计算机?2021年起广州中考课目改为“4+4”...
  6. js List 对象封装【原创】
  7. 深度学习中用到的一些函数
  8. ueditor 上传图片或者视频报错 413 Request Entity Too Large
  9. mysql实现decode_Oracle中的DECODE()函数,MySQL中怎么实现DECODE()函数
  10. DockerFile构建