给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree
例:
输入: head = [-10,-3,0,5,9]
输出: [0,-3,9,-10,null,5]
解释: 一个可能的答案是[0,-3,9,-10,null,5],它表示所示的高度平衡的二叉搜索树。
解析:
每次构造根节点时,都选取中间位置的值进行构造即可。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def sortedListToBST(self, head):
"""
:type head: Optional[ListNode]
:rtype: Optional[TreeNode]
"""
sum = []
while head: # 将链表的值存到列表里面
sum.append(head.val)
head = head.next
def build(left, right):
if left > right: # 停止条件
return None
mid = (left + right)/2 # 中间值得下标
root = TreeNode(sum[mid]) # 构建根节点
root.left = build(left, mid - 1) # 左子树
root.right = build(mid + 1, right) # 右子树
return root # 返回构造好的树
return build(0, len(sum) - 1) # 调用函数