zoukankan      html  css  js  c++  java
  • 109. 有序链表转换二叉搜索树

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

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

    示例:

    给定的有序链表: [-10, -3, 0, 5, 9],

    一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:

    0
    /
    -3 9
    / /
    -10 5

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def sortedListToBST(self, head: ListNode) -> TreeNode:
            def getMid(head):
                pre=None
                slow=fast=head
                while fast and fast.next:
                    pre=slow
                    slow=slow.next
                    fast=fast.next.next
                if pre:
                    pre.next=None
                return slow
            
            if not head:
                return None
            mid=getMid(head)
            node=TreeNode(mid.val)
            if head==mid:
                return node
            node.left=self.sortedListToBST(head)
            node.right=self.sortedListToBST(mid.next)
            return node
    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def sortedListToBST(self, head: ListNode) -> TreeNode:
            nums=[]
            while head:
                nums.append(head.val)
                head=head.next
            def dfs(nums,l,r):
                if l==r:return 
                mid=l+(r-l)//2
                node=TreeNode(nums[mid])
                node.left=dfs(nums,l,mid)
                node.right=dfs(nums,mid+1,r)
                return node
            return dfs(nums,0,len(nums))
  • 相关阅读:
    C# SqlTransaction事务,先从后主
    去除HTML标记
    GIT拉取问题
    QQ音乐API
    解决UEditor编辑器禁用时点击文本编辑器会多加一个字符问题
    UEditor编辑器增加placeholder提示
    C# List去重及优化建议
    ref和out解析
    时间标准格式转换及数值的ToString的格式化
    没有被“怼”,顺利通过华为Android三面,看看面试官都问了我什么?
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13764107.html
Copyright © 2011-2022 走看看