今天学习了B树和红黑树的概念
总结:
1.在cs61b中B树分为2-3树和2-3-4树:
- 其中主要的关键点是定L的大小。L是指一个节点最多拥有的元素个数。
- B树的不变量(我记作为限制):
2.1) 每个叶子结点到根的路径数相同。
2.2) 每个包含元素个数为k的非叶子结点,其必有链接k+1个叶子结点
2.本课程中将的红黑树称为左倾红黑树(LLRBT:Left-Leaning Red Black Tree)。
其思想是利用旋转方法使LLRBT能够转变为BST,并且每条左红链接能够和一个2-3数进行对应。
2.1 限制:
1.在2-3树的基础之上
2 每个新插入的节点都使用红链接线。
LLRBT的高度不超过(对应2-3树的树高X2+1)
2.2 旋转思想:
1)旋转:
1.1)左上旋:将旋转点作为右子树的左孩子(其中右子树的原本的左孩子作为旋转点的右孩子)
1.2)右下旋:将旋转点作为左子树的右孩子(其中左子树的原本的右孩子作为旋转点的左孩子)
2.3 新插入点安装BST插入后树的形状需要进行调整的情况:
2.1)插入点使树变为右倾:此时利用左上旋将其转变为左倾
2.2)插入点连续左倾:此时利用右旋将其连续左倾节点变为同兄弟节点
2.3)颜色反转:也就是接2.2情况进行调整树后,因为在LLRBT中没有右红链接线,我们将把子链接的红链接线变为黑链接线,而父结点的与爷结点的黑链接线转变为左红链接线
不过需要注意的是,在红黑树中新插入点需要进行转换的情况会有很多。需要根据情况不断调整树的形状为BST。
最主要的是,经过这些树的不断变形,其结点仍符合BST的节点规则(左孩子值<父结点值<右孩子值)。
复杂度的话为logN。
ps:小感叹一下前辈们巧妙的思想。