zoukankan      html  css  js  c++  java
  • 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    
  • 相关阅读:
    .NET LINQ 数据分区
    .NET LINQ 投影运算
    .NET LINQ 限定符操作
    .NET LINQ 筛选数据
    freeswitch媒体处理方式
    freeseitch设置通道增益
    鼎信设备设置通道增益,提高音量
    freeswitch 录音
    freeswitch录音设置(不设置缓存)
    freswitch 设置sip中的callid作为用到的uuid
  • 原文地址:https://www.cnblogs.com/bonelee/p/8728466.html
Copyright © 2011-2022 走看看