先简单说一下关于树的一些基本常识,内容抽空补充~
完全二叉树
对于一个树高为h的二叉树,如果其第0层至第h-1层的节点都满。如果最下面一层节点不满,则所有的节点在左边的连续排列,空位都在右边。这样的二叉树就是一棵完全二叉树。
堆
- 堆树是一颗完全二叉树;
- 堆树中某个节点的值总是不大于或不小于其孩子节点的值;
- 堆树中每个节点的子树都是堆树。
二叉查找树
二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:
1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
3. 任意节点的左、右子树也分别为二叉查找树。
4. 没有键值相等的节点(no duplicate nodes)。
简单说就是左子节点>根节点>右子节点
平衡二叉树
满足性质:空树或者左右子树的高度差的绝对值小于等于1,且左右子树都是平衡二叉树
B树
B+树
红黑树
R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。
红黑树的特性:
- 每个节点或者是红色,或者是黑色
- 根节点必定是黑色
- 如果节点是红色,则它的子节点和父节点必定是黑色
- 每个叶子节点必是黑色(NIL或者NULL叶子节点)
- 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
注:
- 红黑树是二叉查找树,也是平衡二叉树,所以也具有二叉查找树和平衡二叉树的特性
- NIL节点是空节点,没有子节点,红黑树的叶子节点必定是NIL节点
- 加入NIL,就是为了让每一个路径都差不多长度相等,进而达到平衡的效果
左旋和右旋:
对节点A进行左旋:A与A的右子节点R(A)交换,R(A)的左子节点变为A的右子节点
对节点A进行右旋:A与A的左子节点L(A)交换,L(A)的右子节点变为A的左子节点
红黑树的基本操作:
添加
删除
注意:在大量查找的情况下,平衡二叉树的效率更高,也是首要选择。
在大量增删的情况下,红黑树是首选。
参考文章:
https://www.cnblogs.com/skywang12345/p/3245399.html
https://blog.youkuaiyun.com/qq_36647176/article/details/88417296
https://www.jianshu.com/p/2a8f2b3511fd
https://www.zhihu.com/question/312327402/answer/1263993419