当前位置:   article > 正文

力扣:109. 有序链表转换二叉搜索树(Python3)_有序链表转换二叉搜索树 力扣

有序链表转换二叉搜索树 力扣

题目:

给定一个单链表的头节点  head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。

来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

示例:

示例 1:

输入:head = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:一个可能的答案是[0,-3,9,-10,null,5],它表示所示的高度平衡的二叉搜索树。


示例 2:

输入:head = []
输出:[]

解法:

链表转成列表,接着用递归解。

代码:

  1. # Definition for singly-linked list.
  2. # class ListNode:
  3. # def __init__(self, val=0, next=None):
  4. # self.val = val
  5. # self.next = next
  6. # Definition for a binary tree node.
  7. # class TreeNode:
  8. # def __init__(self, val=0, left=None, right=None):
  9. # self.val = val
  10. # self.left = left
  11. # self.right = right
  12. class Solution:
  13. def sortedListToBST(self, head: Optional[ListNode]) -> Optional[TreeNode]:
  14. def bst(trees, pre, left_or_right):
  15. if len(trees) == 0:
  16. return
  17. mid = (len(trees) - 1) // 2
  18. if left_or_right == 0:
  19. pre.left = node = TreeNode(trees[mid])
  20. else:
  21. pre.right = node = TreeNode(trees[mid])
  22. bst(trees[:mid], node, 0)
  23. bst(trees[mid + 1:], node, 1)
  24. nums = []
  25. while head:
  26. nums.append(head.val)
  27. head = head.next
  28. if len(nums) == 0:
  29. return None
  30. mid = (len(nums) - 1) // 2
  31. root = TreeNode(nums[mid])
  32. bst(nums[:mid], root, 0)
  33. bst(nums[mid + 1:], root, 1)
  34. return root

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/405127
推荐阅读
相关标签
  

闽ICP备14008679号