定义

一种含有红黑节点并能自平衡的二叉查找树(BST)

性质

1.每个节点有红/黑标记位

2.根节点是黑色(硬性规定)

3.每个叶子节点(NIL)都是黑色的虚节点(由此引出性质5)

叶子节点 color = black,value = None

4.每个红色节点的两个字节点一定是黑色的

红色节点一定有父节点,并且父节点一定是黑色

5.任意一系欸但到每个叶子节点的路径都包含数量相同的黑色节点(黑色完美平衡)

由性质1可定义红黑树节点

class RedBlackNode():

def __init__(self,val,color='Red'):

self.color = color

self.left = None

self.right = None

self.parent = None

self.value = value

平衡性

RBT不是AVL,红色非平衡,黑色平衡

新增节点只需考虑当前节点的三代(祖父母G 父母P 叔叔U 兄弟B 当前节点C),其他节点无需考虑

自平衡的原子操作

自平衡包括:变色,旋转(同AVL树,基于最短路径来确定旋转方向)

查找操作

红黑树的查找操作和二叉查找树相同,时间复杂度O(logn)

新增操作

分以下几种情况

1.C = root

即没有父节点,新增C=red,修改C=black

2.C.parent = black

新增C = red

3.C.parent = red && C.uncle = red

(此操作没有旋转,只有变色)

新增C=red

变色GPU,P=black,U=black,G=red

若G变红导致不满足性质,将G作为新增节点递归处理

4.C.parent = red && (C.uncle = black || C.uncle == None)

若 CPG在三点一线

以P为圆心,旋转G节点

变色P,G节点

若CBG为三角关系

以C为原因旋转P,后以P为圆心,旋转G节点

变色P,G节点

常见面试题

Java的HashMap的数据结构是什么?

内部使用一个桶数组来存储,当桶里面原色达到一定数量时候,会自行进行扩容到原来的1.5倍。当哈希碰撞激烈,在桶的某个位置上聚集的元素增多,会自动生成一个单链表,采用尾插法,当链表长度多于8,会自动进化成红黑树,为什么这样呢?由于单链表的查找时间复杂度为O(n),如果单链表长度过长会导致查找变慢,红黑树的特点是稳定,无论查找、插入、删除时间复杂度都是O(logn),虽然复杂但保证了效率。

python 红黑树_python学习笔记|红黑树(性质与插入)相关推荐

  1. python pow和**_Python学习笔记 | 实例3:天天向上的力量

    本文为中国大学MOOC<Python语言程序设计>课程学习笔记,课程主讲:嵩天老师,练习平台:Python123,参考教材:<Python语言程序设计基础> 天天向上的力量 加 ...

  2. python eval 入门_Python学习笔记整理3之输入输出、python eval函数

    Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网    浏览: 次    日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...

  3. python分组求和_Python学习笔记之pandas索引列、过滤、分组、求和功能示例

    本文实例讲述了Python学习笔记之pandas索引列.过滤.分组.求和功能.分享给大家供大家参考,具体如下: 前面我们已经把519961(基金编码)这种基金的历史净值明细表html内容抓取到了本地, ...

  4. python图形设置_python学习笔记——基本图形绘制

    1.python蟒蛇python蟒蛇代码 #PythonDraw.py import turtle turtle.setup(650,350,200,200)# 设置画布的长.宽.起点 turtle. ...

  5. python dict遍历_Python学习笔记:19个pythonic编程习惯,让你的Python入门更优雅

    Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然. 要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优 ...

  6. python通信信号处理_python学习笔记——信号模块signal(示例代码)

    基于python学习笔记--多进程间通信--Linux信号基础的学习基础,进一步学习Python标准库中的signal模块. 尽管signal是python中的模块,但是主要针对UNIX平台(比如Li ...

  7. python编程计算器_Python学习笔记:用Python开发一个计算器项目

    最近抽空看了下python的学习文档,发现开发工具以及资料支持对开发者相当的友好,相比之下,以前用TCL&Tk做的项目主要缺点有两个:1,开发难度大,调试手段只有靠print一种,而且语法错误 ...

  8. python tkinter 表格_python学习笔记(Tkinter编程利用Treeview实现表格自动更新)

    博主今天总结这段时间抽空写的一个GUI编程项目 功能是查看本地打印机队列,可选择指定队列重新打印 直接上图 UI设计包括3个区域左上方,右上方和下方列表区域 使用网格grid方法来分配位置 下面是界面 ...

  9. python elseif用法_python学习笔记(一)

    0.前言 本文是根据廖雪峰python教程学习总结而来. 参考<python学习手册>,<流畅的python>以及python官方手册等网络资料 略过了与C和C++ 语言相同的 ...

最新文章

  1. Windows Server 2012 R2工作文件夹⑨:自动发现设置
  2. Android开发--初探SQLiteDataBase/数据库的创建,更新,插入,查询
  3. [Cocos2d-x For WP8]Hello world
  4. 找出n个自然数(1,2,3,…,n)中取r个数的组合(C语言)
  5. ListView控件的弧形设计
  6. 如何查看linux系统源码
  7. oracle 函数 实现重载_Oracle 过程、函数、包、重载、自主事务
  8. 如何在ashx里提取context.Request.Files?
  9. eclipse里maven install时,报错提示jdk为无效的目标版本:1.7
  10. chmod 755和chmod 4755的区别
  11. 极米发布极光RS Pro、H3、Z8X三款新品
  12. 服务器centos 内网代理上网- tinyproxy
  13. linux文件设置显示行号
  14. springboot+shiro自定义拦截器互踢问题
  15. 《CLR via C# 第四版》 读书笔记(一)CLR的执行模型
  16. linux 下编译gstreamer
  17. java工资京舞蹈学院李雪,舞蹈家黄豆豆:带孩子比跳舞累多了(图)
  18. 浅谈模块化UPS对提高数据中心适应性的作用
  19. CSS布局之弹性布局
  20. 操作系统内存管理详细总结

热门文章

  1. 在django中按照时间范围查询数据库
  2. 定义一个Teacher(教师)类,和一个Student(学生)类
  3. MATLAB常见语法错误分析及解决办法
  4. 用MATLAB读取MORSE、BPSK、QPSK信号的波形和频谱
  5. 基于SSM实现新闻推荐系统
  6. Spark源码阅读02-Spark核心原理之调度算法
  7. 使用【飞桨】实现【手写数字识别】
  8. SpringBoot(二):设置springboot同一接口程序启动入口
  9. Git 使用规范流程
  10. 统计数列中是连续数的个数