LintCode:排序列表转换为二分查找树
先遍历得到所有的值,然后递归生成就可以了。
"""
Definition of ListNode
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
class Solution:
"""
@param head: The first node of linked list.
@return: a tree node
"""
def sortedListToBST(self, head):
# write your code here
if head == None:
return head
nodes = []
while head != None:
nodes.append(head.val)
head = head.next
n = len(nodes)
self.root = TreeNode(nodes[n/2])
self.fun(self.root, nodes)
return self.root
def fun(self, root, nodes):
n = len(nodes)
if n == 0:
return
leftnodes = nodes[:n/2]
if len(leftnodes) == 0:
root.left = None
else:
root.left = TreeNode(leftnodes[len(leftnodes)/2])
rightnodes = nodes[n/2+1:]
if len(rightnodes) == 0:
root.right = None
else:
root.right = TreeNode(rightnodes[len(rightnodes)/2])
self.fun(root.left, leftnodes)
self.fun(root.right, rightnodes)