• leetcode 108. Convert Sorted Array to Binary Search Tree


    Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

    For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

    Example:

    Given the sorted array: [-10,-3,0,5,9],
    
    One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:
    
          0
         / 
       -3   9
       /   /
     -10  5
    

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def sortedArrayToBST(self, nums):
            """
            :type nums: List[int]
            :rtype: TreeNode
            """
            def build_bst(arr, i, j):
                if i > j:
                    return None
                mid = (i+j)>>1
                node = TreeNode(arr[mid])
                node.left = build_bst(arr, i, mid-1)
                node.right = build_bst(arr, mid+1, j)
                return node            
            
            return build_bst(nums, 0, len(nums)-1)    

    迭代解法,本质上是先序遍历:

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def sortedArrayToBST(self, nums):
            """
            :type nums: List[int]
            :rtype: TreeNode
            """        
            if not nums: return None
            q = [(0, len(nums)-1)]
            ans = TreeNode(0)
            nodes = [ans]
            while q:
                i, j = q.pop()
                mid = (i+j)>>1
                node = nodes.pop()
                node.val = nums[mid]
                if mid+1 <= j:
                    node.right = TreeNode(0)
                    q.append((mid+1, j))
                    nodes.append(node.right)
                if mid-1 >= i:
                    node.left = TreeNode(0)
                    q.append((i, mid-1))
                    nodes.append(node.left)
            return ans    
  • 相关阅读:
    [01] 异常的概念和处理
    [03] 节点流和处理流
    [02] 输入/输出流 和 字节/字符流
    [01] File类
    Apache的https协议配置
    Apache的虚拟主机配置
    Apahce的虚拟用户认证及server-status页
    Apache配置日志功能
    Apache脚本路径别名(CGI接口)
    Apache配置站点根目录、用户目录及页面访问属性
  • 原文地址:https://www.cnblogs.com/bonelee/p/8728466.html
Copyright © 2020-2023  润新知