• 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))
  • 相关阅读:
    总结的git操作命令小抄集
    两种方式实现压缩文件或文件夹
    eclipse 中执行 main 函数如何添加参数
    alert()、confirm()和prompt()的区别与用法
    阿里某安全工程师写的明星代码
    在 Linux 环境下报错 java.lang.reflect.InvocationTargetException
    MyBatis学习-SQL 符号篇
    初识IP基础分类、CIDR
    Snort
    Dshell----开源攻击分析框架
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13764107.html
Copyright © 2020-2023  润新知