红黑树二叉查找树二叉排序树的理解
https://blog.csdn.net/chudelong1/article/details/82698010
感谢,自己记个笔记
二叉查找树(BST)具备什么特性呢?
1.左结点小于或等于根结点的值。
2.右结点大于或等于根结点的值。
3.左、右子树也分别为二叉排序树。
查找 10
很方便查找,等同于二分法查找。
缺点:
如果依次插入如下五个节点:7,6,5,4,3。
虽然也是二叉排序树,这样性能就会很差了。
下面开始说 红黑树
1.节点是红色或黑色。
2.根节点是黑色。
3.每个叶子节点都是黑色的空节点(NIL节点)。
4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
下图中这棵树,就是一颗典型的红黑树:
至于怎么插入数据,一定注意 插入完数据之后要符合上面的所有规则。
如果不符合规则呢?那么要做的操作包括 变色(调整颜色)、旋转(左旋转、右旋转)
变色好理解,就是红的变黑的,黑的变红的。
旋转呢?这也是红黑树自平衡的一个重要操作。
左旋转:
逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子。说起来很怪异,大家看下图:
图中,身为右孩子的Y取代了X的位置,而X变成了自己的左孩子。此为左旋转。
右旋转:
顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子。大家看下图:
图中,身为左孩子的Y取代了X的位置,而X变成了自己的右孩子。此为右旋转。
不用考虑为什么,就是为了保持平衡!就是为了解决二叉排序树瘸腿的问题的。
转载于:https://www.cnblogs.com/duoba/p/11409791.html
红黑树二叉查找树二叉排序树的理解相关推荐
- 二叉排序树、平衡二叉树、红黑树、B树、B+树
全民制作人们,大家好.我是练习时长两天半的个人练习册,喜欢B树 ,B+树, BST树, AVL树,来 red black ~ 目录 一.二叉排序树(BST树) 1.1二叉排序树的定义 1.2二叉排序 ...
- 从二叉查找树到平衡树:avl, 2-3树,左倾红黑树(含实现代码),传统红黑树...
参考:自平衡二叉查找树 ,红黑树, 算法:理解红黑树 (英文pdf:红黑树) 目录 自平衡二叉树介绍 avl树 2-3树 LLRBT(Left-leaning red-black tree左倾红黑树 ...
- 红黑树效率为甚恶魔是log_Linux内核-深入理解红黑树与B+树应用场景
一.红黑树和B树应用场景有何不同? 2者都是有序数据结构,可用作数据容器.红黑树多用在内部排序,即全放在内存中的,微软STL的map和set的内部实现就是红黑树.B树多用在内存里放不下,大部分数据存储 ...
- 从2-3树理解红黑树
说起红黑树就头痛,在大学时就没搞懂,看的晕晕乎乎,理解不了.直到前几天在极客时间的<数据结构与算法之美>专栏中的<26 | 红黑树(下):掌握这些技巧,你也可以实现一个红黑树 > ...
- 408数据结构学习笔记——二叉排序树、二叉平衡树、红黑树
目录 1.二叉排序树 1.1.二叉排序树的基本概念 1.2.二叉排序树的查找代码实现 1.3.二叉排序树的插入 1.4.二叉排序树的删除 1.5.二叉排序树的查找效率 1.6.二叉排序树的缺陷 2.平 ...
- 红黑树(Red-Black Tree,RBT)
1.红黑树 强烈推荐!!算法交互式网站: Red/Black Tree 在insert左侧框输入要插入的数字,然后点击insert就会按红黑树规则进行插入 1.1 什么是红黑树? 红黑树是一种平衡二叉 ...
- 遍历HashMap源码——红黑树原理、HashMap红黑树实现与反树型化(三)
本章将是HashMap源码的最后一章,将介绍红黑树及其实现,HashMap的remove方法与反树型化.长文预警~~ 遍历HashMap源码--红黑树原理.HashMap红黑树实现与反树型化 什么是红 ...
- Android技术栈(五)HashMap(包括红黑树)与ArrayMap源码解析
1 总览 本文会对 Android 中常用HashMap(有红黑树)和ArrayMap进行源码解析,其中 HashMap 源码来自 Android Framework API 28 (JDK=1.8) ...
- 红黑树B树B+树对比分析
红黑树 二叉查找树 学习红黑树之前先理解一下二叉查找树(BST),二叉查找树的特性: 1.左子树上所有结点的值均小于或等于它的根结点的值. 2.右子树上所有结点的值均大于或等于它的根结点的值. ...
最新文章
- 【Qt】QImage加载bmp位图数据
- 在Centos 7下编译openwrt+njit-client
- java 装配_java – 无法自动装配方法
- 为什么硬盘速度忽快忽慢_C盘装软件会拖慢电脑速度?C盘是不是比其他盘快?...
- Java 多线程编程之 interruptException
- 删除有序vector中的重复值c++
- 计算机专业论文关于天气预报的,关于天气预报论文范文写作 天气预报相关论文写作资料...
- 设置PL/SQL工具SQL窗口的字体大小及颜色
- (39)Verilog HDL参数:localparam
- PDF解密怎么弄?分享这3个解密软件
- nginx 配置静态网页
- C++类内初始值的初始化形式
- 子网掩码和prefixlength
- 湖北审协计算机领域,国家知识产权局专利局专利审查协作湖北中心
- Zemax操作30--目镜基础知识和凯涅尔目镜仿真
- Docker技术入门与实战 第二版-学习笔记-7-数据管理(volume)
- 策测解金:黄金突破箱体,别错过回调就是多
- CANoe和CANalyzer各种版本之间的区别
- 用python计算数学集合A-B
- 无线串口服务器 moxa 稳定,moxa串口服务器通讯设置参数