[Leetcode][第109题][JAVA][有序链表转换二叉搜索树][分治][快慢指针][中序遍历]
【问题描述】[中等]
【解答思路】
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][有序链表转换二叉搜索树][分治][快慢指针][中序遍历]相关推荐
- LeetCode(109):有序链表转换二叉搜索树
Medium! 题目描述: 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: ...
- LeetCode 109. 有序链表转换二叉搜索树(快慢指针+递归)
1. 题目 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 来源:力扣(LeetC ...
- 【算法】有序链表转换二叉搜索树和从中序与后序遍历序列构造二叉树Java解答参考
三道算法题 1.有序链表转换二叉搜索树 Java代码参考 2.从中序与后序遍历序列构造二叉树 Java代码参考 3.移除元素 Java代码参考 1.有序链表转换二叉搜索树 给定一个单链表,其中的元素按 ...
- ( “树” 之 BST) 109. 有序链表转换二叉搜索树 ——【Leetcode每日一题】
二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 109. 有序链表转换二叉搜索树 给定一个单链表的头节点 head ,其中的元素 按升序排序 , ...
- 【LeetCode每日一题】——109.有序链表转换二叉搜索树
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...
- Java实现 LeetCode 109 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...
- 109. 有序链表转换二叉搜索树
链接:109. 有序链表转换二叉搜索树 题解:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/so ...
- 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...
- 数据结构与算法--力扣109题将有序双向链表转换为二叉搜索树
将有序数组转换为二叉搜索树 近一年都比较关注算法相关的知识,也刷了不少题,之前的文章中大多也是算法相关的文章,但是感觉每次遇到树相关的题型都不能应对自如,因此还是有必要在相关知识上下功夫,因此有此次总 ...
最新文章
- vSphere 5.0系列之二 vSphere Client的安装
- PHP函数之日期时间函数date()使用详解
- java语言for模板_java版的模板语言
- 读取SSDT表和原函数地址
- STL 之search,search_n,sort,binary_search
- 蓝桥杯JAVA省赛2013-----B------4(黄金连分数)
- 广度优先遍历类似于二叉树的_二叉树的各种遍历方法的简单解释
- Viewport3D 类Viewport3D 类Viewport3D 类
- UNITY 之FixedUpdate
- 酸奶小妹升级成酸奶妈妈了!
- tomcat内存溢出,性能优化配置讲解
- 电商中,订单号的生成方法
- 尚硅谷-SpringBoot1.5.9(已过时,直接学2)
- 基于STM32单片机的远程智能浇花花盆GSM短信浇水补光方案原理图程序设计
- new创建类对象与直接定义的区别
- IAR配色方案及配置方法
- 一键生成所有接口的文档 Swagger + springBoot
- 解决在KDE桌面环境WebStorm不能输入中文问题
- 过年帮同学做Windows 7/8系统的心得
- 大胆预测一波:23年软件测试行业的趋势及前景
热门文章
- select * 和select 所有字段的区别
- [推荐] TechNet 广播 SQL Server 2000完结篇
- saltstack部署java应用失败无日志——CICD 部署
- No field gDefault in class Landroid/app/ActivityManagerNative
- 中考物理可不可以用计算机,不能用计算机?2021年起广州中考课目改为“4+4”...
- js List 对象封装【原创】
- 深度学习中用到的一些函数
- ueditor 上传图片或者视频报错 413 Request Entity Too Large
- mysql实现decode_Oracle中的DECODE()函数,MySQL中怎么实现DECODE()函数
- DockerFile构建