红黑树插入删除和可视化的代码实现
一、简介
本文只给出红黑树插入删除和可视化的代码实现,如若要具体学习红黑树的插入删除情况,本文可能帮助不大。
想要理解红黑树,推荐可以看这篇文章
二、红黑树特性
红黑树是一种自平衡的二叉搜索树,具有以下性质:
- 节点要么是红色要么是黑色。
- 根节点是黑色的。
- 所有叶子节点(NIL节点)都是黑色的。
- 每个红色节点的两个子节点都是黑色的。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
- 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
三、红黑树结构体定义
typedef enum {
RED,
BLACK
} Color;
// 红黑树节点结构
typedef struct redBlackNode {
RBTElemType data; // 数据域
struct redBlackNode
*parent, *lchild, *rchild; // 双亲、左、右节点指针域
Color color;
// 节点颜色,0表示黑色,1表示红色
} redBlackNode, *redBlackTree;
四、红黑树插入删除
具体的代码实现已放到了github上,插入删除的具体实现在RedBlackTreeInsert.c文件和RedBlackTreeDelete.c文件。
五、可视化实现
可视化借助了Graphviz的dot工具,我们首先获取这颗红黑树的.dot文件,在使用dot工具解析(dot语法请自行学习)即可得到红黑树的可视化图片。
代码实现在github的TreeVision.c文件