题目链接
英文链接:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/
中文链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/
题目详述
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
1 | 给定的有序链表: [-10, -3, 0, 5, 9], |
题目详解
本题与 LeetCode108-将有序数组转换为二叉搜索树 的思路是一致的。不过数组支持随机存取,链表不支持随机存取,重点在于怎么恰当地从链表中得到中间结点。
- 数组可以采用
lo + (hi - lo) / 2
的方式得到得到中间结点。 - 链表得到中间结点的常规方法可以先遍历得到长度,再走一半距离。
- 链表得到中间结点的更好的方法可以采用快慢指针。
1 | public class LeetCode_00109 { |