zoukankan      html  css  js  c++  java
  • LeetCode 108. 将有序数组转换为二叉搜索树

    108. 将有序数组转换为二叉搜索树

    Difficulty: 简单

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

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

    示例:

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

    Solution

    Language: 全部题目

    一道递归构建平衡二叉树的题目,根据先前由“先序遍历和中序遍历”和“后序遍历和中序遍历”构建二叉树的思路写的,第一次测试的时候中位数的索引计算方式不正确所以没有成功。另外这个题目的答案不是唯一的,所以测试的时候如果返回值跟答案不一致不要大惊小怪。

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    ​
    class Solution:
        def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
            def buildHelper(start, end):
                if start > end: return None
                mid = (end + start) // 2  # 注意这里计算中位数位置的方法。第一次用的是(end - start)// 2,这种方式是错误的!
                root = TreeNode(nums[mid])
                root.left = buildHelper(start, mid-1)
                root.right = buildHelper(mid+1, end)
                return root
    ​
            n = len(nums)
            return buildHelper(0, n-1)
    
  • 相关阅读:
    POJ 1703 Find them, Catch them
    POJ 2236 Wireless Network
    POJ 2010 Moo University
    POJ 2184 Cow Exhibition
    POJ 3280 Cheapest Palindrome
    POJ 3009 Curling 2.0
    POJ 3669 Meteor Shower
    POJ 2718 Smallest Difference
    POJ 3187 Backward Digit Sums
    POJ 3050 Hopscotch
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14041903.html
Copyright © 2011-2022 走看看