Nginx 红黑树结构 ngx_rbtree_t

概述

有关红黑树的基础知识在前面文章中已经做了介绍,想要更详细的了解红黑树可以参考文章《数据结构-红黑树》,在这里只是单纯对 Nginx 中红黑树源码的解析,Nginx 红黑树源码是实现跟算法导论中的讲解是一样的。

红黑树结构

typedef ngx_uint_t  ngx_rbtree_key_t;
typedef ngx_int_t   ngx_rbtree_key_int_t;


typedef struct ngx_rbtree_node_s  ngx_rbtree_node_t;

struct ngx_rbtree_node_s {
    ngx_rbtree_key_t       key;     
    ngx_rbtree_node_t     *left;    
    ngx_rbtree_node_t     *right;   
    ngx_rbtree_node_t     *parent;  
    u_char                 color;   
    u_char                 data;    
};

typedef struct ngx_rbtree_s  ngx_rbtree_t;

typedef void (*ngx_rbtree_insert_pt) (ngx_rbtree_node_t *root,
    ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);


struct ngx_rbtree_s {
    ngx_rbtree_node_t     *root;    
    ngx_rbtree_node_t     *sentinel;
    ngx_rbtree_insert_pt   insert;  
};

红黑树的操作

初始化操作

旋转操作

插入操作

删除操作

Last updated

Was this helpful?