https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/description/
思路:用一个全局变量node顺序遍历链表,然后用中序遍历方式递归构造树即可(画图比较好理解)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def sortedListToBST(self, head):
"""
:type head: ListNode
:rtype: TreeNode
"""
runner = head
length = 0
while runner:
runner = runner.next
length += 1
self.node = head
return self.helper(0, length-1)
def helper(self, start, end):
if start > end:
return None
mid = (start + end) // 2
left = self.helper(start, mid-1)
tmp = TreeNode(self.node.val)
tmp.left = left
self.node = self.node.next
right = self.helper(mid+1, end)
tmp.right = right
return tmp