红黑树

作者: Lnstark | 来源:发表于2021-05-09 21:55 被阅读0次

一、树

树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。树有很多种,向上面的一个节点有多余两个的子节点的树,称为多路树,而每个节点最多只能有两个子节点的一种形式称为二叉树。

二、二叉搜索树

如果我们给二叉树加一个额外的条件,就可以得到一种被称作二叉搜索树(binary search tree)的特殊二叉树。左子树要么是空要么所有节点小于根节点,右子树要么是空要么所有节点大于根节点。且左右子树也都是BST。

2.1 查找

  • 查找值比当前节点值大,则搜索右子树
  • 查找值等于当前节点值,停止搜索(终止条件)
  • 查找值小于当前节点值,则搜索左子树

2.2 插入

待插入的节点也需要从根节点开始进行比较,小于根节点则与根节点左子树比较,
反之则与右子树比较,直到左子树为空或右子树为空,则插入到相应为空的位置。

2.3 删除

  • 删除没有子节点的节点,只需要改变该节点的父节点引用该节点的值,即将其引用改为 null 即可。
  • 删除有一个子节点的节点,我们只需要将其父节点原本指向该节点的引用,改为指向该节点的子节点即可。
  • 删除有两个子节点的节点,际上就是要找比删除节点关键值大的节点集合中最小的一个节点,只有这样代替删除节点后才能满足二叉搜索树的特性。

删除其实是挺复杂的,那么其实我们可以不用真正的删除该节点,只需要在Node类中增加一个标识字段isDelete。

2.4 二叉搜索树的特点和缺陷

特点:拥有二分查找的高性能又能拥有链表一样的灵活性
缺陷:极端情况,可能退化成线性链表

三、平衡二叉树AVL树

  • 具有二叉查找树的全部特性。
  • 每个节点的左子树和右子树的高度差至多等于1。

四、红黑树

太多了懒得抄,直接看有道云笔记
额外想说的:
数据项只能存储在内部结点中(internal node)。我们所指的"叶结点"在其父结点中可能仅仅用一个NULL指针表示,但是将它也看作一个实际的结点有助于描述红黑树的插入与删除算法,叶结点一律为黑色。
插入的节点一定是叶子节点。

参考资料:
B站-小刘讲源码

相关文章

  • 数据结构—树—红黑树

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

  • TreeMap

    需要先了解红黑树,这是之前分析红黑树的文章。之前在分析红黑树时,我认为红黑树=二叉查找树+红黑平衡,关于二叉查找树...

  • 数据结构与算法-AVL 红黑树

    AVL树AVL树 算法红黑树红黑树 B站

  • [转载]红黑树

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

  • 拿下红黑树

    红黑树 红黑树、2-3树的简单定义: 实现红黑树的基本结构以及添加操作(维护定义,左旋、右旋、颜色反转) 红黑树与...

  • 红黑树

    啥是红黑树,红黑树 = 二叉树

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

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

  • 彻底理解红黑树(三)之 删除

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

  • Golang红黑树

    红黑树 红黑树是每个节点都带有颜色属性(红色或黑色)的二叉查找树。红黑树也属于自平衡二叉查找树。 红黑树具有如下性...

  • 数据结构红黑树添加、修改原理分析

    源码分析大纲 数据结构解析 红黑树试下原理刨析 数据结构解析 1.红黑树 1.1 红黑树概念 红黑树(Red Bl...

网友评论

      本文标题:红黑树

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