Github: 插入一个红节点到黑根节点
Email: BuddyZhang1 buddy.zhang@aliyun.com
目录
红黑树插入一个红节点到黑根节点
向一棵只有根节点的红黑树中插入一个红节点,那么该节点可以直接插入到红黑树,成为根节点的左孩子
或者右孩子。注意,每次插入的新节点都是红节点。
核心代码实现
当调用 __rb_insert() 函数向红黑树插入一个红节点时候,此时红黑树中只有一个根节点,并且
根节点是黑色,所有此时可以直接插入,无需考虑翻转或变色。rb_is_black() 函数用于检查节点
是否为黑节点。
红黑树插入一个红节点到黑根节点与 2-3 树的关系
毕竟红黑树是 2-3 树的一种表现形式,因此插入一个红节点到黑根节点的原理也符合 2-3 树的原理。
黑根节点在 2-3 树中就是一个 2- 节点,因此插入一个红节点之后,红节点与 2- 节点融合成一个 3-
节点,此时 3- 节点符合 2-3 树的要求,所有无需分裂提取。
如上图,在 2-3 树中,新加入的节点与 2- root 节点融合成一个 3- 节点,此时对应的红黑树分
布如上,更多红黑树与 2-3 树的关系请看文档:
红黑树与 2-3 树的关系分析
红黑树插入根节点实践
实践源码
实践源码 GitHub
开发者可以从上面的链接中获得所有的实践代码,也可以使用如下命令获得:
实践源码具体内容如下:
源码编译
使用如下命令进行编译:
源码运行
实践源码的运行很简单,可以使用如下命令,并且运行结果如下:
运行分析
在实践代码中,使用二叉查找树的方法,向红黑树的黑根节点插入红节点,然后调用 rb_insert_color()
红黑树实际插入操作。开发者可以使用调试工具跟踪 rb_insert_color() 的调用过程。
附录
Data Structure Visualizations
红黑树与 2-3 树的关系
BiscuitOS Home
BiscuitOS Driver
BiscuitOS Kernel Build
Linux Kernel
Bootlin: Elixir Cross Referencer
搭建高效的 Linux 开发环境
赞赏一下吧 🙂