Python数据结构之平衡二叉树

前言

​   平衡二叉树(AVL树):空树,或者任一结点左、右子树高度差的绝对值不超过1,也即 ∣ B F ( T ) ∣ < = 1 |BF(T)|<=1 ∣BF(T)∣<=1。而平衡因子(BF),其中 h L h_L hL​和 h R h_R hR​分别为T的左、右子树的高度。此外,平衡二叉树是在BST上建立而成。BF公式如下:
B F ( T ) = h L − h R BF(T) = h_L - h_R BF(T)=hL​−hR​

LL型(右旋)

图示

代码

    def right_rotate(node):"""LL型,右旋"""if node is None:return# 创建新的结点,保存左旋后的结点new_node = copy.deepcopy(node)new_node.right = node.rightnew_node.left = node.left.right# 连接新的左右结点node.val = node.left.valnode.left = node.left.leftnode.right = new_node

结果

LL未平衡: 6 7 8 9 10 12
LL平衡后: 8 7 6 10 9 12

RR型(左旋)

图示

代码

    def left_rotate(node):"""RR型,左旋"""if node is None:return# 创建新的结点,保存左旋后的结点new_node = copy.deepcopy(node)new_node.left = node.leftnew_node.right = node.right.left# 连接新的左右结点node.val = node.right.valnode.right = node.right.rightnode.left = new_node

结果

RR未平衡: 3 4 5 6 7 8
RR平衡后: 6 4 3 5 7 8

混合型

图示

  • LR型

  • RL型

代码

    def jude_node(self, node):"""判断二叉树是否平衡"""#  1.右子树高于左子树,if self.get_right_height(node) - self.get_left_height(node) > 1:if node.right and self.get_left_height(node.right) >                                                           self.get_right_height(node.right):# RL型,右旋后左旋self.right_rotate(node.right)self.left_rotate(self.root)else:self.left_rotate(self.root)return# 2.左子树高于右子树if self.get_left_height(node) - self.get_right_height(node) > 1:if node.left and self.get_right_height(node.left) >                                                         self.get_left_height(node.left):# LR型,左旋后右旋self.left_rotate(node.left)self.right_rotate(self.root)else:self.right_rotate(self.root)

结果

LR未平衡: 6 7 8 9 10 11
LR平衡后: 8 7 6 10 9 11
RL未平衡: 7 10 13 14 15 16 17
RL平衡后: 14 10 7 13 16 15 17

参考

数据结构与算法–平衡二叉树/AVL树 一步一步带你用Python完整实现平衡二叉树/AVL树 Python实现平衡二叉树/AVL树的调整 AVL树结点/节点的调整

中国大学mooc数据结构

Python数据结构之平衡二叉树相关推荐

  1. python数据结构和算法讲解_【学习】python数据结构和算法

    二.算法分析 2.2 什么是算法分析 大O表示法 image.png 2.3 python数据结构的性能 列表 image.png 字典 image.png 说一下list[index]的o(1)原理 ...

  2. python数据结构基础(单链表,多链表,二叉树)

    python数据结构基础(单链表,多链表,二叉树) 数据结构指数据对象中数据元素之间的关系 Python 给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做 ...

  3. [FreeCodeCamp笔记] Python 数据结构和算法1 二分搜索 Binary Search

    我以前学过数据结构和算法(data structure and algorithms. 现在普遍简称DSA),当时用的Robert Sedgewick的coursera课程.这位大神写的<算法( ...

  4. python3 namedtuple_你不能低估的Python数据结构Namedtuple(二)

    上篇你不能低估的Python数据结构Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续. namedtuples和数据类(Data Class)之间有什么区别? 功能 在Pyt ...

  5. 小女也爱C#(5)---程序员内功心法数据结构(完全平衡二叉树)

    小女最近到看数据结构(完全平衡二叉树)心有所想,如果计算机比喻成一门武学,那么数据结构就是内功心法,招式有可以千变万化,只有内功心法可以不变,以不变应万变,是武学的最高境界(引自马老师内功心法总决式) ...

  6. python线性表和队列_[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列...

    python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构 ...

  7. python数据结构 树_python数据结构之二叉树的建立实例

    先建立二叉树节点,有一个data数据域,left,right 两个指针域 复制代码 代码如下: # -*- coding: utf - 8 - *- class TreeNode(object): d ...

  8. python数据结构包括什么_Python中的数据结构详解

    概述 在深入研究数据科学和模型构建之前,Python中的数据结构是一个需要学习的关键内容 了解Python提供的不同数据结构,包括列表.元组等 介绍 数据结构听起来是一个非常直截了当的话题,但许多数据 ...

  9. python数据结构树和二叉树,python数据结构树和二叉树简介

    一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树. 树的递归定义: 树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树 ...

最新文章

  1. 女朋友都能看懂,Spring如何解决循环依赖?
  2. 6.Django与Ajax
  3. js 对已知数组数据的导出EXCEL
  4. java getevent_Java ActionEvent.getWhen方法代码示例
  5. angularsjs单独删除一条信息,不刷新页面
  6. 如何计算页面打开获取流量_网站SEO优化如何获取更多的流量?
  7. 机器学习与医学应用基础(超星尔雅学习通)--答案
  8. 火狐浏览器的一些插件
  9. java生成eml_用Java创建一个.eml(email)文件
  10. 用聊天记录当证据 对方改了微信号怎么证明他是他
  11. python 爬取http://www.weather.com.cn/中国主要城市周边城市的天气
  12. OpenAI-2018年强化学习领域7大最新研究方向全盘点
  13. VTK笔记-切面重建-使用交互器更新断层图的奇异现象的问题排查
  14. 标准光源与色温对应关系
  15. 【数据结构Python描述】优先级队列描述“银行VIP客户插队办理业务”及“被插队客户愤而离去”的模型实现
  16. STM32开发 -- MMA8452Q 手册阅读
  17. (1)ESP8266微信门铃
  18. 由n阶幻方问题引发的思考
  19. SpaceClaim通过脚本创建新窗口
  20. pytest官方文档 6.2 中文翻译版(第五章):pytest夹具:明确的,模块化的,可扩展的

热门文章

  1. 第2章 第2节-Dijkstra Astar
  2. 【C++】计算两个日期之间的差
  3. 【160】VS2022调试通过海康摄像头烟火识别SDK
  4. 一文了解 TKG 如何使用 GPU 资源池
  5. 电视行业迎来市场“拐点” TCL曲面电视表现最为抢眼
  6. 计算机毕业设计python基于django的学生考试成绩数据分析与可视化系统
  7. 3D建模教学 | 卡通石头高模制作技巧
  8. 8-数据可视化-地图可视化
  9. 华为交换机批量加入 Vlan 方法
  10. FDTD solutions——TFSF(全场散射场)光源及斜入射