给定一个按升序排列的整数数组,将它转换为平衡二叉搜索树
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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.html、https://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/