给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定的有序链表: [-10, -3, 0, 5, 9],
一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5思考:
前置信息:BST,升序的链表,平衡二叉树
这里突破点是平衡二叉树,给一个链表怎么构建平衡二叉树?先找到中间,在递归的处理左右两边即可
class Solution(object):
def sortedListToBST(self, head):
def findmid(head,tail):
slow = head
fast = head
while fast!=tail and fast.next!=tail:
slow = slow.next
fast = fast.next.next
return slow
def helper(head,tail):
if head == tail:
return
node = findmid(head,tail)
root = TreeNode(node.val)
root.left = helper(head,node)
root.right = helper(node.next,tail)
return root
return helper(head,None)
有序数组
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def sortedArrayToBST(self, nums):
"""
:type nums: List[int]
:rtype: TreeNode
"""
def helper(left, right):
if left > right:
return None
# always choose left middle node as a root
p = (left + right) // 2
# inorder traversal: left -> node -> right
root = TreeNode(nums[p])
root.left = helper(left, p - 1)
root.right = helper(p + 1, right)
return root
return helper(0, len(nums) - 1)