Python数据结构之平衡二叉树
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数据结构之平衡二叉树相关推荐
- python数据结构和算法讲解_【学习】python数据结构和算法
二.算法分析 2.2 什么是算法分析 大O表示法 image.png 2.3 python数据结构的性能 列表 image.png 字典 image.png 说一下list[index]的o(1)原理 ...
- python数据结构基础(单链表,多链表,二叉树)
python数据结构基础(单链表,多链表,二叉树) 数据结构指数据对象中数据元素之间的关系 Python 给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做 ...
- [FreeCodeCamp笔记] Python 数据结构和算法1 二分搜索 Binary Search
我以前学过数据结构和算法(data structure and algorithms. 现在普遍简称DSA),当时用的Robert Sedgewick的coursera课程.这位大神写的<算法( ...
- python3 namedtuple_你不能低估的Python数据结构Namedtuple(二)
上篇你不能低估的Python数据结构Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续. namedtuples和数据类(Data Class)之间有什么区别? 功能 在Pyt ...
- 小女也爱C#(5)---程序员内功心法数据结构(完全平衡二叉树)
小女最近到看数据结构(完全平衡二叉树)心有所想,如果计算机比喻成一门武学,那么数据结构就是内功心法,招式有可以千变万化,只有内功心法可以不变,以不变应万变,是武学的最高境界(引自马老师内功心法总决式) ...
- python线性表和队列_[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列...
python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构 ...
- python数据结构 树_python数据结构之二叉树的建立实例
先建立二叉树节点,有一个data数据域,left,right 两个指针域 复制代码 代码如下: # -*- coding: utf - 8 - *- class TreeNode(object): d ...
- python数据结构包括什么_Python中的数据结构详解
概述 在深入研究数据科学和模型构建之前,Python中的数据结构是一个需要学习的关键内容 了解Python提供的不同数据结构,包括列表.元组等 介绍 数据结构听起来是一个非常直截了当的话题,但许多数据 ...
- python数据结构树和二叉树,python数据结构树和二叉树简介
一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树. 树的递归定义: 树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树 ...
最新文章
- 女朋友都能看懂,Spring如何解决循环依赖?
- 6.Django与Ajax
- js 对已知数组数据的导出EXCEL
- java getevent_Java ActionEvent.getWhen方法代码示例
- angularsjs单独删除一条信息,不刷新页面
- 如何计算页面打开获取流量_网站SEO优化如何获取更多的流量?
- 机器学习与医学应用基础(超星尔雅学习通)--答案
- 火狐浏览器的一些插件
- java生成eml_用Java创建一个.eml(email)文件
- 用聊天记录当证据 对方改了微信号怎么证明他是他
- python 爬取http://www.weather.com.cn/中国主要城市周边城市的天气
- OpenAI-2018年强化学习领域7大最新研究方向全盘点
- VTK笔记-切面重建-使用交互器更新断层图的奇异现象的问题排查
- 标准光源与色温对应关系
- 【数据结构Python描述】优先级队列描述“银行VIP客户插队办理业务”及“被插队客户愤而离去”的模型实现
- STM32开发 -- MMA8452Q 手册阅读
- (1)ESP8266微信门铃
- 由n阶幻方问题引发的思考
- SpaceClaim通过脚本创建新窗口
- pytest官方文档 6.2 中文翻译版(第五章):pytest夹具:明确的,模块化的,可扩展的