声明:
今天是第23道题。将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5
解法1。使用递归的方法,先确定父节点,由升序数组的中位数决定,分为左右子树后在对子树递归调用即可,代码如下。
# 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
"""
# V 1.0,能提交
if not nums:
return None
# 升序数组转为二叉树的原则是左大右小,所以父节点一定是数组的中位数,即nums[mid]
mid = len(nums)//2
root = TreeNode(nums[mid])
# 左子树节点由nums[:mid]构成,右子树由nums[mid+1:]递归调用sortedArrayToBST,因为步骤是完全一样的
root.left = self.sortedArrayToBST(nums[:mid])
root.right = self.sortedArrayToBST(nums[mid+1:])
return root
结尾
解法1:https://blog.csdn.net/qq_34364995/article/details/80427215