- 左子树上所有节点的值均小于或等于它的根结点的值
- 右子树上所有节点的值均大于或等于它的根节点的值
- 左、右子树也分别为二叉排序树
下图就是一颗典型的二叉查找树

1.1.1、二叉查找树的好处
比如我们想要在上面的二叉树上查找节点10,应该怎么搜索呢?
a、查找根结点9
b、由于10>9,查找右孩子13
c、由于10<13,查找左孩子11
d、由于10<11,查找左孩子10
这种方式正是二分查找的思想,查找所需要的最大次数等同于二叉查找树的高度。在插入节点的时候也是利用类似的方法,通过一层一层比较大小,找到新节点适合的位置插入
但是很遗憾,二叉查找树仍然存在它的缺陷
1.1.2、二叉查找树的缺陷
假设初始的二叉查找树只有三个节点,根节点为9,左孩子值为8,右孩子为12,二叉树的样子就如下图:

接下来我们依次插入以下五个节点:7、6、5、4、3。按照二叉查找树的特性,结果会变成什么样子呢?

这样的二叉树就不像二叉树了,还不如说是一条链表。查找的性能就会大打折扣,几乎变成了线性的。那么如何解决二叉查找树多次插入新节点而导致的不平衡呢?红黑树就应运而生了。
1.2、红黑树
红黑树的一个优点是:所有重要的操作(例如插入、删除、搜索)都可以在O(log n)的时间内完成。 n为树中元素的数目
红黑树是一种自平衡的二叉查找树。除了符合二叉查找树的基本特征外,它还具有下列的附加特性:
a、节点是红色或者黑色
b、根节点是黑色
c、每个叶子节点都是黑色的空节点(NIL节点)
d、每个红色的节点的两个子节点都是黑色(不能出现有两个连续的红色节点)
e、从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点

当插入或者删除节点的时候,红黑树的规则有可能被打破。这个时候就需要做出一些调整,来维持上面说到的这些规则。什么情况下会破坏红黑树的规则,什么情况下不会破坏规则呢?
①、向原来的红黑树插入值为14的新节点:

由于父节点15是黑色的节点,因此这种情况并不会破坏红黑树的规则,无需做任何的调整。
②、、向原红黑树插入值为21的新节点

由于父节点22是红色节点,因此这种情况打破了红黑树的规则(每个红色节点的两个子节点都是黑色),必须进行调整,使之重新符合红黑树的规则。

最全的Linux教程,Linux从入门到精通
======================
-
linux从入门到精通(第2版)
-
Linux系统移植
-
Linux驱动开发入门与实战
-
LINUX 系统移植 第2版
-
Linux开源网络全栈详解 从DPDK到OpenFlow

第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
_linux内存空间红黑树的排序值大小&spm=1001.2101.3001.5002&articleId=141994077&d=1&t=3&u=569f043f66354edea569820dfa29c75f)
615

被折叠的 条评论
为什么被折叠?



