Python实现"将有序数组转换为二叉搜索树"的一种方法

给定一个按升序排列的整数数组,将它转换为平衡二叉搜索树

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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

1:递归(参考:https://www.cnblogs.com/yuanzhaoyi/p/5876268.htmlhttps://www.cnblogs.com/springfor/p/3879823.html

平衡二叉树的概念,总结如下:

      一.若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

      二.若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

      三.它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树

要满足一下条件,对于没有排序的数组来说,就比较麻烦,但对于已排序的数组,大都用二分递归转换方法来处理

算法逻辑很简单,就是先找到中间元素,创建根节点,左右子树分别用中间元素左边(即小于中间节点的元素)和中间元素右边(即大于中间节点的元素)递归创建。

这样,节点的左子树永远比节点小,右子树永远比节点大,且由于平均递归创建每一层的子树,所以两个子树的高度差不会超过1。

def sortedArrayToBST(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        if not nums:
            return None
        length = len(nums)
        mid = length // 2
        root = TreeNode(nums[mid])
        root.left = self.sortedArrayToBST(nums[:mid])
        root.right = self.sortedArrayToBST(nums[mid+1:])
        return root

算法题来自:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/description/

猜你喜欢

转载自blog.csdn.net/qiubingcsdn/article/details/82387968