平衡二叉树的构建(递归

目录

  • 1.概念:
  • 2.特点:
  • 3.构建方法:
  • 4.代码:
  • 小结:

1.概念:

平衡二叉树(Balanced Binary Tree),也称为AVL树,是一种二叉树,它满足每个节点的左子树和右子树的高度差不超过1。换句话说,它是一棵高度平衡的二叉树。平衡二叉树的目的是为了保证二叉树的查询、插入和删除操作的时间复杂度都能够达到最优。
在这里插入图片描述

2.特点:

平衡二叉树有几个重要的特点:

高度平衡:每个节点的左子树和右子树的高度差不超过1,使得整个树的高度非常平衡。

快速查询:由于平衡二叉树的高度平衡,因此查询操作的时间复杂度为O(log n),在n个元素中查找一个元素只需要最多log2^n次比较。

快速插入和删除:平衡二叉树的插入和删除操作都能够在O(log n)时间内完成,因为节点的插入和删除都会导致树的平衡性被破坏,需要进行调整。

3.构建方法:

平衡二叉树的构建方法有很多种,但是最常见的方法是使用递归算法。具体来说,可以按照以下步骤构建平衡二叉树:

首先将输入的数据进行排序,然后按照中间节点的值创建根节点。

将剩余的数据分成两部分,分别递归地创建左子树和右子树,并将它们作为根节点的左子树和右子树。

重复上述步骤,直到所有的节点都被创建出来。

4.代码:

# 平衡二叉树节点类
class BiTreeNode():def __init__(self, data):self.lchild = None  # 二叉树左子树self.rchild = None  # 二叉树右子树self.data = data# 创建平衡二叉树的函数
def create(list_data):# 中间节点索引mid_index = len(list_data) // 2# 创建节点node = BiTreeNode(list_data[mid_index])# 列表左右分割rlist_data = list_data[:mid_index]llist_data = list_data[mid_index + 1:]# 递归构建左子树和右子树if len(rlist_data) > 0:node.rchild = create(rlist_data)if len(llist_data) > 0:node.lchild = create(llist_data)return node  # 返回根节点if __name__ == "__main__":list_data = [1, 2, 3, 0, 7, 8]   # 输入数据root = create(sorted(list_data))    # 默认升序

小结:

关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
由于本号流量还不足以发表推广,搜我的公众号即可:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/299451.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx快速入门:return、rewrite重定向、重写详解(六)

0. 引言 我们在日常的生产过程中,常常有需要重定向转发的需求,比如企业更换了域名,但又要保证之前的域名能访问,这就需要做重定向的跳转。 我们在之前的章节中学习了Nginx的负载均衡、各类转发代理配置,今天继续来补…

云计算:现代技术的基本要素

众所周知,在儿童教育的早期阶段,幼儿园都会传授塑造未来行为的一些基本准则。 今天,我们可以以类似的方式思考云计算:它已成为现代技术架构中的基本元素。云现在在数字交互、安全和基础设施开发中发挥着关键作用。云不仅仅是另一…

C++力扣题目344--反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入:s ["h","e…

【序列化和反序列化】

🍁什么是序列化和反序列化? 🍁典型解析🍁拓展知识仓🍁如何进行序列化和反序列化🍁未实现Serializable,可以序列化吗? 🍁典型解析 在Java中,我们可以通过多种方式来创建对…

一体机定制_工控触控一体机安卓主板方案

工控一体机是一种集成化的硬件方案,采用了联发科MT8768八核芯片和12nm制程工艺。该芯片拥有2.0GHz的主频和IMG PowerVR GE8320图形处理GPU,具备强大的视频处理能力,并且兼容大部分的视频格式和解码能力。工控一体机搭载了Android 9.0操作系统…

如何分析 JVM 内存瓶颈浅谈

背景: 当操作系统内存出现瓶颈时,我们便会重点排查那个应用占用内存过大。对于更深一步分析内存的使用,就进一步去了解内存结构,应用程序使用情况,以及内存如何分配、如何回收,这样你才能更好地确定内存的…

在MongoDB中使用数组字段和子文档字段进行索引

本文主要介绍在MongoDB使用数组字段和子文档字段进行索引。 目录 MongoDB的高级索引一、索引数组字段二、索引子文档字段 三、注意事项 MongoDB的高级索引 MongoDB是一个面向文档的NoSQL数据库,它提供了丰富的索引功能来加快查询性能。除了常规的单字段索引之外&am…

042、文本与语言模型

之——nlp基础 目录 之——nlp基础 杂谈 正文 1.文本预处理 2.语言模型 3.语言模型实现 杂谈 在语言模型中,需要对文本进行预处理,进行数字化的一系列操作,而后才能进行网络的拟合。 以前的相关:词性判断 正文 1.文本预处…

maven下载jar包失败

配置国内镜像 设置国内的仓库,比如: <!--阿里仓库--><mirror><id>alimaven</id><name>aliyun maven</name><url>https://maven.aliyun.com/repository/public/</url><mirrorOf>central</mirrorOf></mirror>…

高并发接口限流

文章目录 简介实现限流常见的算法4种1、计数器限流算法2、滑动窗口限流算法3、漏桶限流算法4.令牌桶限流算法 接口限流方案限流算法对比、网关限流实践总结Redis实现限流的几种方式基于Redis的setNX的操作&#xff08;固定时间算法&#xff09;基于Redis的数据结构zset(滑动窗口…

家校互通小程序实战开发01需求分析

目录 1 角色的划分2 用例分析3 创建业务数据源4 创建登录用户数据源总结 最近几年&#xff0c;随着移动互联网的深入发展&#xff0c;我们的日常生活和工作和微信已经紧密绑定。其实&#xff0c;有时候生活和工作的界限已经不明显&#xff0c;在我们的微信好友里既有家人、朋友…

软件测试必问的33个面试题

1.你为什么选择软件测试行业 因为之前有了解软件测试这个行业&#xff0c;觉得他的发展前景很好。 2.根据你以前的工作经验描述一下软件开发、测试过程&#xff0c;由那些角色负责&#xff0c;你做什么 要有架构师、开发经理、测试经理、程序员、测试员。我在里面主要是负责所…