前言
最近在突然想起一些基础的东西, 向着温故知新, 有了些新的感悟和大家分享一下.
排序算法是数据结构的一个重要组成部分, 当时学习的时候没有少折腾, 这里来看看大佬们怎么运用这些数据结构来构建庞大的计算机体系的.
二叉树是排序算法的一个衍生, 基于二叉树的构建不同, 有完全树, RB树, B+树等.
我们把一颗有序的树压平, 其实就是一个队列.
为啥要有二叉树呢, 其实要从二分查找说起, 我们在二分查找的时候, 很快遍历到我们想要的结果.
我们回忆一下, 二分是怎么二分的, 我们要先知道队列的总数, 然后查看其二分之一长度的元素值和我们目标数字的大小, 小的在左边, 大的在右边.
这种二分查找法和完全二叉树有异曲同工之妙. 而且完全二叉树不需要知道队列的总长度, 根据节点的左右节点的信息就可以递归找到目标节点. 而且相比队列, 二叉树的增删维护要方便很多, 不用大面积的移动内存, 只需要简单的修改链表节点信息即可.
今天我温故了红黑树, 好像和书上讲的不一样, 也不晓得正确不, 不过要简单一些, 所以分享出来, 下面是我的理解:
红黑树算法
增: 注意两红相遇, 上红变黑, 旁支为红变黑, 旁支为黑就转向, 直到不冲突为止.
删: 找到左边最大的值, 替换当前节点, 转换为删叶子节点, 如果替换的叶子节点是黑就需要进行修正.
删除叶子节点的修正方法: 上变黑, 旁变红, 两红相遇就上移旁红, 继续旁边红, 直到旁边不冲突为止.
删9: 找到左边最大8替换, 8是黑色,需要修正: 8的子树不平衡, 将左10红, 上面的11黑,15红, (遇13,17红), 15上行,17黑.
参考:
- TreeMap_implementing_RBTree_python