109. Convert Sorted List to Binary Search Tree
把Q108改成了在linked list
上操作,此时长度无法直接获得,就不能定位中点。
比较暴力的解法是把
linked list
转换成array
,然后复制Q108的操作。还可以利用
BST
的性质,先遍历获得linked list
的长度,然后in-order
去生成BST
。但其实这个方法跟前一个相比并无显著优势,同样有临时的额外空间使用,同样需要遍历一次链表。利用快慢双指针,可以在不获取长度的前提下获得链表的中点,但在时间复杂度上有比较大的牺牲,好处是完全没有使用额外空间。
class Solution:
def sortedListToBST(self, head: ListNode) -> TreeNode:
nums = []
while head:
nums.append(head.val)
head = head.next
def helper(left, right):
if left <= right:
mid = (left + right)//2 # 取左中点
root = TreeNode(val = nums[mid])
root.left = helper(left, mid-1)
root.right = helper(mid+1, right)
return root
return helper(0, len(nums)-1)
Last updated
Was this helpful?