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

results matching ""

    No results matching ""