红黑树(RBtree)
来源:互联网 发布:爱微游数据修改 编辑:程序博客网 时间:2024/05/29 02:27
有可能是因为输入不够随机,也有可能经过某些插入和删除操作,二叉搜索树有可能会失去平衡而造成效率低下的情况。红黑树是一种平衡的二叉搜索树。
红黑树(RBtree)定义
红黑树不仅仅是一个二叉搜索树,而且满足以下规则:
- 每个节点的颜色不是红色就是黑色;
- 根节点的颜色为黑色。
- NULL节点视为黑色;
- 如果每个节点的颜色为红色,则其子节点的颜色必须为黑色;
- 任何一个节点到NULL(树尾端)的任何路径,所含的黑色节点数必须相同。
所以,根据规则4,新增节点的颜色必须为红色;根据规则3,新增节点的父节点颜色必须为黑色。
插入节点
左旋转
右旋转
情况一:
插入的节点为根节点。
对策:直接将节点的颜色改为黑色。
情况二:
插入节点的父节点为黑色。
对策:插入节点的颜色为红色,此时并没有破坏红黑树的规则。
情况三:
插入节点的父节点和叔叔节点都是红色。
对策:
此时祖父节点一定存在。将当前节点的父节点和叔叔节点涂黑,祖父结点涂红,再将祖父节点变成当前节点,从新的当前节点开始重新运行此插入算法。(图片来源:saturnman)
插入节点4,变化前:
变化后:
情况四
当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子节点。
对策:
把当前节点的父节点做为新的当前节点,以新当前节点为支点做左旋转操作。
插入节点7,变化前:
变化后:
情况五
当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左子节点。
对策:父节点变为黑色,祖父节点变为红色,以祖父节点为支点右旋转。
插入节点2,变化前:
变化后:
0 0
- 红黑树(RBtree)
- 数据结构-红黑树(RBTree)
- 红黑树(RBTree)
- RBTree(红黑树)
- 红黑树(RBTree)的实现
- 红黑树-RBTree
- RBTree红黑树
- RBTree----红黑树
- RBTree(红黑树)
- 红黑树--RBTree
- 红黑树【RBTree】
- 算法编程_红黑树(RBTree)
- 红黑树(RBTree)之插入结点图解
- 红黑树(RBTree)之删除结点图解
- 二叉搜索树—RBTree(红黑树)
- Linux内核之rbtree(红黑树)
- RBTree(红黑树的简单实现)
- RBTree-红黑树的实现
- 分布式数据库等其它一些基本概念(一)
- Linux kernel module symbols relocation
- 吉吉影音官网版 v2.8.1.2_p2p播放器下载
- HTML5-大纲
- nginx + php ( php-fpm )编译安装
- 红黑树(RBtree)
- Spring源码解析
- Web开发神器最智能的JavaSscript IDE——WebStorm
- SQL server 2005导出整个数据库
- 站在移动互联时代的十字路口上_deviceone
- SCORM
- Objective-C中的@property和@synthesize用法
- Spring实现事务源码分析
- 第十二周 项目一:教师兼干部类