美文网首页
python学习笔记|红黑树(性质与插入)

python学习笔记|红黑树(性质与插入)

作者: KeyLiu7 | 来源:发表于2020-09-08 17:04 被阅读0次

定义

一种含有红黑节点并能自平衡的二叉查找树(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学习笔记|红黑树(性质与插入)

    定义 一种含有红黑节点并能自平衡的二叉查找树(BST) 性质 1.每个节点有红/黑标记位 2.根节点是黑色(硬性规...

  • 红黑树(RBT)

    红黑树的性质 旋转 插入 删除 #1. 红黑树的性质 红黑树是一棵二叉搜索树,它在每个结点上增加一个存储位来表示结...

  • 红黑树专题

    0.目录 1.算法导论的红黑树本质上是2-3-4树 2.红黑树的结构和性质 3.红黑树的插入 4.红黑树的删除 5...

  • 从二叉树到红黑树

    一说到红黑树,有人就特别恐惧,立马想到的是红黑树的性质啊,插入方式啊,复杂的旋转啊。网上一搜索红黑树,也是这些...

  • 数据结构—树—红黑树

    红黑树概述 红黑树的插入 红黑树的删除

  • 彻底理解红黑树(二)之 插入

    彻底理解红黑树(一)之 二叉搜索树彻底理解红黑树(二)之 插入彻底理解红黑树(三)之 删除 前言 红黑树的插入情况...

  • 红黑树核心之节点新增

    红黑树插入算法 红黑树节点插入与二叉搜索树类似,由根节点开始寻找待插入的位置。与二叉搜索树不同的内容大致有如下几点...

  • [转载]红黑树

    https://zhuanlan.zhihu.com/p/24367771红黑树简介红黑树插入红黑树删除

  • 红黑树-修复

    红黑树是2-3树一种标准二叉查找树的实现因为在实现一些操作(插入,删除等),可能会出现破坏红黑树性质(比如红色有链...

  • 2-3树 二叉树插入递归实现(红黑树)

    使用和二叉查找树相同的方式插入一个结点,如果不满足红黑树性质需要修复 分析一下怎么可以递归往红黑树添加新结点 1....

网友评论

      本文标题:python学习笔记|红黑树(性质与插入)

      本文链接:https://www.haomeiwen.com/subject/cktjektx.html