109. Convert Sorted List to Binary Search Tree(题目链接)
Medium
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example:
Given the sorted linked list: [-10,-3,0,5,9],
One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:
0
/ \
-3 9
/ /
-10 5
方法1:二分
先将单链表转化成数组的形式,然后没戏选择中间的那个数作为当做根节点
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sortedListToBST(self, head: ListNode) -> TreeNode:
nodes = []
node = head
while node:
nodes.append(node)
node = node.next
def sortedListToBST(nodes: List, start: int, end: int) -> TreeNode:
if start > end:
return
m = (start + end) // 2
left = sortedListToBST(nodes, start, m - 1)
right = sortedListToBST(nodes, m + 1, end)
head = TreeNode(nodes[m].val, left, right)
return head
return sortedListToBST(nodes, 0, len(nodes) - 1)