Convert Sorted List to Binary Search Tree
和convert array一样利用分治法即可,因为链表的原因,每次必须手动利用快慢指针找到中间点,另外这道题也可以明显发现计算机中对于范围为什么使用左闭右开区间多,这样做省去了一个中间点的额外逻辑处理,分治时直接两段可以接上不用考虑中间点的问题
class Solution(object):
def sortedListToBST(self, head):
"""
:type head: ListNode
:rtype: TreeNode
"""
return self.helper(head, None)
def helper(self, head, tail):
if head == tail:
return None
if head.next == tail:
return TreeNode(head.val)
dummy = ListNode('d')
dummy.next = head
slow, fast = dummy, dummy
while fast != tail and fast.next != tail:
slow = slow.next
fast = fast.next.next
result = TreeNode(slow.val)
result.left = self.helper(head, slow)
result.right = self.helper(slow.next, tail)
return result