每日一练python11

题目:(将有序数组转换为二叉搜索树)给你一个整数数组nums ,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树(AVL)。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

示例1:
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9]

示例2:
输入:nums = [1,3] 输出:[3,1]
解释:[1,3] 和 [3,1] 都是高度平衡二叉搜索树。

程序说明:
1、在做题之前,得先了解什么是二叉树,二叉搜索树以及平衡二叉搜索树?(二叉树:度不超过2的树; 二叉搜索树:任何一节点的键值一定大于它的左子树中的每一个节点的键值,并小于它右子树的每一个节点的键值,注意是每一个节点的键值; 平衡二叉搜索树:左子树与右子树高度之差的绝对值不超过1,每个左子树和右子树都是AVL树每一个节点都有一个平衡因子,任一节点的平衡因子是-1、0、1(每一个节点的平衡因子 = 右子树高度 - 左子树高度)
如图:在这里插入图片描述
2、此题的重点在于平衡,并且由题中所描述的数组是升序的有序数组,因此可用中序遍历(先左子树,再中间,最后右子树,递增)
3、代码中先运用了有关if判断,是为了判断数组中是否还有元素
4、mid与root两步是先将数组的中间值存入root
5、接着将数组分为左右两部分
6、接着递归调用方法啊,再分别对左右两部分子树进行中序遍历

全部代码:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
        if not nums:
            return None
            
        mid = len(nums) // 2
        root = TreeNode(nums[mid])

        left = nums[:mid]
        right = nums[mid+1:]

        root.left = self.sortedArrayToBST(left)
        root.right = self.sortedArrayToBST(right)

        return root

运行结果:
在这里插入图片描述
题目来源:力扣(leetcode)

猜你喜欢

转载自blog.csdn.net/qq_52669357/article/details/121342548