本文由浅入深介绍rbt红黑树
一、数组:
1.特点:
内存连续,储存数据类型相同,查询快,增删慢
2.为什么数组查询快,增删慢?
查询快原因:因为内存连续,储存数据类型相同,所以每个数据占用的内存大小已知,可以根据起始位置与下标直接找到数据地址。
增删慢原因:因为如果在数组中间增删数据,增删位置后面的数据都要向前或向后移动。
二、链表:
1.特点:
内存不连续,储存数据类型可不相同,查询慢,增删快;
2.为什么链表查询慢,增删快?
查询慢原因:因为链表内存不连续,储存数据类型不同,无法通过下标直接定位到数据地址
增删快原因:因为如果在数组中间增删数据,只需要将上一个节点的next指向新节点,将新节点的next指向下一个节点。
三、树:
1.树的几个概念:
- 根节点、子节点、叶子节点:
- 节点的权:节点的值
- 节点的度:叉数
- 数的高度:层数
四、二叉树:
每个节点的度均小于等于2的树。树常用的算法是递归,有时while可代替递归。(注:二叉查找树是一种特殊的二叉树,相对较小的值保存在左节点中,较大的值保存在右节点中)
五、满二叉树:
除了叶子节点外,其他节点都有左右两个节点,且叶子节点均在最后一层。
六、完全二叉树:
叶子在最后一层或倒数第二层,且最后一层从左到右连续,倒数第二层从右到左连续。满二叉树必定是完全二叉树。
七、二叉搜索树bst(Binary Search Tree):
1.定义:
bst(Binary Search Tree)二叉搜索树又称为二叉排序树:查询快,左节点小于,右节点大,(递归)
2.遍历:
前序、中序、后序、层次遍历;这里的序指的是父节点。
八、平衡二叉搜索树AVL:
1.定义:
满足bst(二叉搜索树),且所有节点平衡因子不大于1(平衡因子:每个节点的左/右子树的高度差的绝对值叫平衡因子)
2.不平衡节点:
平衡二叉树变不平衡路径上的第一个节点
3.平衡化处理:左旋/右旋/先左后右双旋转/先右后左双旋转:
旋转规律:找到插入节点回朔路径上第一个不平衡节点(bph),然后从不平衡节点(bph)
向下数三个节点(这点很重要)
LL:如果在bph的左侧的左侧子树插入的节点,满足LL,从不平衡节点(bph)
向下数的三个节点,需要右旋
RR:如果在bph的右侧的右侧子树插入的节点,满足RR,从不平衡节点(bph)
向下数的三个节点,需要左旋
LR:如果在bph的左侧的右侧子树插入的节点,满足LR,从不平衡节点(bph)
向下数的三个节点,需要先右旋再左旋
RL:如果在bph的右侧的左侧子树插入的节点,满足RL,从不平衡节点(bph)
向下数的三个节点,需要先左旋再右旋
如:LL型:
R.right=N;
N.left=T3;
R=Root;
九、2-3树:
定义:一个节点一个或两个元素,平衡因子为0,满足bst;4节点分裂变为3个2节点,不平衡融合
分裂:4节点变3个2节点
融合:
十、红黑树:
定义:红黑树其实就是带颜色2-3树,红节点表示和父节点组成3节点,注意红黑树叶子节点是null