Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
思路:先将list转成array,再通过递归利用二分法给每个节点赋值
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param head, a list node
# @return a tree node
def sortedListToBST(self, head):
array = []
cur = head
while cur != None:
array.append(cur.val)
cur = cur.next
return self.createBST(array, 0, len(array) -1)
def createBST(self, array, start, end):
if start > end:
return None
mid = (start+end)/2
root = TreeNode(array[mid])
root.left = self.createBST(array, start, mid-1)
root.right = self.createBST(array, mid+1, end)
return root