Leetcode-109.有序链表转换为二叉搜索树
题目描述
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定的有序链表: [-10, -3, 0, 5, 9],
一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法1:快慢指针
由于是链表我们不能直接获得中间数所在的位置,所以我们创建一个快慢指针,前指针移动两次,后指针移动一次,后指针也就能刚好到中间位置,其余与108题解题思路一样,同样是递归,二分
注意代码中的一些小细节,特殊处理一下当前后指针没有动的情况
1 | class Solution { |
时间复杂度:O(nlogn)
解法2:转换为数组
直接遍历一遍链表创建一个新的数组,对数组进行操作,也就与108题完全一样了