栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

每日一练python11

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日一练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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/504074.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号