您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

ngx_rbtree_t红黑树

2025/10/6 1:40:56发布14次查看
ngx_rbtree_t红黑树
红黑树的特性
节点是红色或黑色;根节点是黑色;所有叶子节点都是黑色(即nil哨兵节点);每个红色节点的两个子节点都是黑色;从任一节点到其每个叶子节点的所有简单路径都包含相同数目的黑色节点。红黑树节点结构体
typedef ngx_uint_t ngx_rbtree_key_t;typedefstruct ngx_rbtree_node_s ngx_rbtree_node_t;structstruct ngx_rbtree_node_s { //无符号整型关键字 ngx_rbtree_key_t key; //左子节点 ngx_rbtree_node_t *left; //右子节点 ngx_rbtree_node_t *right; //父节点 ngx_rbtree_node_t *parent; //节点的颜色,0:黑,1:红 u_char color; //仅一字节的数据 u_char data; };
将这样的树节点放在元素的第一个成员位置,这样方便直接强制转换。
i.e.
typedefstruct { ngx_rbtree_node_t node; ngx_uint_t num; }testrbtreebode;
红黑树节点提供的函数
函数名参数含义执行意义
ngx_rbt_red(node) node是ngx_rbtree_node_t类型的节点指针 设置node为红色
ngx_rbt_black(node) node是ngx_rbtree_node_t类型的节点指针 设置node为黑色
ngx_rbt_is_red(node) node是ngx_rbtree_node_t类型的节点指针 判断node是否为红色
ngx_rbt_is_black(node) node是ngx_rbtree_node_t类型的节点指针 判断node是否为黑色
ngx_rbt_copy_color(n1,n2) n1、n2同上 将n2的节点颜色复制给n1
ngx_rbtree_node_t *ngx_rbtree_min(node,sentinel) node、sentinel都是ngx_rbtree_node_t *类型 找到当前节点及其子树中的最小节点(按照key)
ngx_rbtree_sentinel_init(node) node同上 初始化哨兵节点
红黑树结构体
typedefstruct ngx_rbtree_s ngx_rbtree_t;/* 为解决不同节点含有相同关键字的元素冲突问题所存在的指针*/typedefvoid (*ngx_rbtree_insert_pt)(ngx_rbtree_node_t *root,ngx_rbtree_node_t *node,ngx_rbtreenode_t *sentinel);struct ngx_rbtree_s { //指向树的根节点(可以直接强制转化为数据元素) ngx_rbtree_node_t *root; //指向nil哨兵节点 ngx_rbtree_node_t *sentinel; //红黑树添加元素的指针 ngx_rbtree_insert_pt insert; };
红黑树容器提供的函数
函数名参数含义执行意义
ngx_rbtree_init(tree,s,i) tree是容器指针;s是哨兵指针;i是ngx_rbtree_insert_pt类型的添加函数 初始化红黑树
void ngx_rbtree_insert(ngx_rbtree_t *tree,ngx_rbtree_node_t *node) tree同上;node是添加的节点指针 添加节点,自动旋转保持特性
void ngx_rbtree_delete(ngx_rbtree_t *tree,ngx_rbtree_node_t *node) tree同上;node是需要删除的节点指针 删除节点,自动旋转保持特性
版权声明:pain is just in your mind.
以上就介绍了ngx\_rbtree_t红黑树,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product