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:递归
思路
先用快慢指针找到中间节点
分治构建平衡二叉树
复杂度分析
时间复杂度:$O(NlogN)$,N 为链表长度。
空间复杂度:$O(logN)$,N 为链表长度。
代码(JavaScript/C++/Python)
JavaScript Code
C++ Code
Python Code
方法 2:空间换时间
思路
由于寻找链表中点的时间复杂度是 $O(N)$,如果事先使用数组将链表的值存储起来,寻找中点就变成了 $O(1)$ 时间的操作,代价则是 $O(N)$ 的额外空间,问题转换成了将有序数组转换成搜索二叉树。
复杂度分析
时间复杂度:$O(N)$,N 为链表长度。
空间复杂度:$O(N)$,N 为链表长度。
代码(JavaScript/C++)
JavaScript Code
C++ Code
Last updated
Was this helpful?