持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
前言
我们认识了二叉查找树,它是一个能给我们提供比线性查找更加快速的查找速度,时间复杂度为O(logn),但是二叉查找树存在一个问题,那就是不断的给它插入数据,或者更新数据,刻意的让左右子树的节点数量极度不平衡,极端的情况下会退化成链表的数据结构,这样二叉查找树的时间复杂度就变为O(n),所以为了解决这个问题,就诞生了一种新的树的结构——平衡二叉树。其中很出名的一个实现类就是——红黑树
平衡二叉树——红黑树
平衡二叉树概念出现的目的就是为了解决我们上面提出的问题,其性质就是为了让整个树左右看起来比较“对称”,不会出现我们所说的左右子树高矮差非常大的情况。这样子整棵树的相对高度就会比较低,对应的插入操作,删除操作以及查找操作的效率就会提高的。
红黑树是平衡二叉树的实现之一,红黑树的英文是“Red-Black Tree”,英文简称 R-B Tree。它是一种不严格符合的平衡二叉查找树的定义的,所以我们来看一下红黑树的定义:顾名思义,红黑树中的节点,一类标记为黑色节点,一类标记为红色节点。除此之外,一棵红黑树还需要满足这样几个要求:
- 根节点是黑色的;
- 每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据;
- 任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的;
- 每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点;
红黑树只是近似平衡的,如果是百分百符合平衡二叉树的定义的话,红黑树的性能会有所下降的,因为维护的节点数量增大时,一次插入的平衡树的时间消耗可能还赶上了线性时间。
总结
每一种新的数据结构的出现都是为了解决现有的数据结构上对一些特殊情况的处理还不够到位,所以了解每种数据结构的特性,才能更好的使用它们。