1 二叉树:
二叉树的概念:
一棵二叉树是节点的一个有限集合,该集合或者为空,或者由一个根节点加上两棵左子树和右子树组成,
二叉树的特点就是左子树的节点值小,而右子树的节点值比父节点大。
基于二叉查找树的这个特点,我们在查找某个节点的时候,可以采取类似于二分查找的思想,正常情况下快速的找到这个节点。
为什么说是正常情况下呢?因为二叉树可能出现一种极端的情况如下:
这种情况下二叉搜索树将退化成近似链或链表,几乎就变成线性查找了。
2 平衡二叉树:
平衡二叉树概念:
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(log(n)),大大降低了操作的时间复杂度。
平衡二叉树也可以说是为了解决二叉查找树退化成近似链或者链表而诞生的,平衡二叉树具有以下特性:
1)具有二叉查找树的全部特性
2)每个节点的左子树和右子树的高度差不能超过1
意思是说,要么它是一棵空树,要么它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。
图一则不是二叉树,因为高度差已经超过1,图二则是平衡二叉树。
基于这个特点就可以保证不会出现大量节点偏向于一面的情况了。
3 红黑树:
红黑树概念:
R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的构建请查看另一篇:
https://blog.csdn.net/qq_39057033/article/details/94722377
在此我们说一下为什么有了平衡二叉树还需要红黑树?
虽然平衡树已经解决了二叉查找树退化为近似链表的缺点,不过缺不是最佳的方法,因为平衡树要求:每个节点的左子树和右子树的深度之差的绝对值不超过1。这样会导致每次插入或者删除都会破坏这个要求,进而我们每次有需要旋转来平衡此树,使之成为一颗新的平衡树。所以红黑树的出现就是为了解决平衡二叉树频繁插入或者删除的缺点而诞生的。