leetcode109 有序链表转换为二叉搜索树
链表已有序,链表的中点作为root,左右部分递归构建二叉树
注意点:
用快慢指针找到中点
注意判断中点是否等于头节点,等于直接返回,否则递归左右部分
def sortedListToBST(self, head: ListNode) -> TreeNode:
if not head:
return None
def findmiddle(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
mid=findmiddle(head)
node=TreeNode(mid.val)
if mid==head:
return node
node.left=self.sortedListToBST(head)
node.right=self.sortedListToBST(mid.next)
return node