LeetCode108-将有序数组转换为二叉搜索树-Python3

题目

示例:

给定有序数组: [-10,-3,0,5,9],

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

      0
     / \
   -3   9
   /   /
 -10  5

思路

这道题是要将有序数组转为二叉搜索树,所谓二叉搜索树,是一种始终满足 左<根<右 的特性的二叉树,如果将二叉搜索树按中序遍历的话,得到的就是一个有序数组了。那么反过来,我们可以得知,根节点应该是有序数组的中间点,从中间点分开为左右两个有序数组,在分别找出其中间点作为原中间点的左右两个子节点,这不就是二分查找法的核心思想么。所以这道题考的就是二分查找法

采用二分法来创建平衡二叉树,根结点刚好为数组中间的节点,根节点的左子树的根是数组左边部分的中间节点,根节点的右子树是数据右边部分的中间节点;代码执行结果和示例给出结果可能不同,但满足平衡二叉树。

Python3代码

# 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):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        if nums == None or len(nums) == 0:
            return None
        return self.recursion(nums, 0, len(nums)-1)
    
    def recursion(self, nums, left, right):
        if left <= right:
            mid = int((left + right)/2)
            p = TreeNode(nums[mid])
            p.left = self.recursion(nums, left, mid-1)
            p.right = self.recursion(nums, mid+1, right)
            return p
        else:
            return None

猜你喜欢

转载自blog.csdn.net/weixin_42762089/article/details/86743345