这里高度平衡的二叉树,核心思想就是找中位数!
这里用到一种非常重要的解题方案:切割链表【万金油代码】
WechatIMG29.jpeg
【万金油代码】 -> 用来切割链表
class Solution:
def find_mid(self, head):
pre = None
slow = head
fast = head
while fast and fast.next:
pre = slow
slow = slow.next
fast = fast.next.next
if pre:
pre.next = None
return slow
def sortedListToBST(self, head: ListNode) -> TreeNode:
if not head:
return
mid = self.find_mid(head)
root = TreeNode(mid.val)
if head == mid:
return root
root.left = self.sortedListToBST(head)
root.right = self.sortedListToBST(mid.next)
return root