Heim >Backend-Entwicklung >PHP-Tutorial >ngx_rbtree_t roter schwarzer Baum

ngx_rbtree_t roter schwarzer Baum

WBOY
WBOYOriginal
2016-08-08 09:20:111606Durchsuche

ngx_rbtree_tRot-Schwarz-Baum

Eigenschaften des Rot-Schwarz-Baums

  1. Der Knoten ist rot oder schwarz;
  2. Der Wurzelknoten ist schwarz;
  3. Alle Blattknoten sind schwarz (d. h. NIL-Sentinel-Knoten);
  4. Die beiden untergeordneten Knoten jedes roten Knotens sind schwarz;
  5. Von jedem Knoten bis zu jedem seiner Blattknoten Alle einfachen Pfade enthalten die gleiche Anzahl schwarzer Knoten.

Rot-schwarze Baumknotenstruktur

<code><span>typedef</span> ngx_uint_t ngx_rbtree_key_t;

<span>typedef</span><span>struct</span> ngx_rbtree_node_s ngx_rbtree_node_t;

<span>struct</span><span>struct</span> ngx_rbtree_node_s {
    <span>//无符号整型关键字</span>
    ngx_rbtree_key_t        key;
    <span>//左子节点</span>
    ngx_rbtree_node_t   *left;
    <span>//右子节点</span>
    ngx_rbtree_node_t   *right;
    <span>//父节点</span>
    ngx_rbtree_node_t   *parent;
    <span>//节点的颜色,0:黑,1:红</span>
    u_char                  color;
    <span>//仅一字节的数据</span>
    u_char              data;
    };</code>

Platzieren Sie einen solchen Baumknoten an der ersten Mitgliedsposition des Elements, was die direkte Umwandlung erleichtert.

d. h.

<code><span>typedef</span><span>struct</span> {
    ngx_rbtree_node_t   node;
    ngx_uint_t          num;
    }TestRBTreeBode;</code>

Funktion bereitgestellt durch den rot-schwarzen Baumknoten

函数名 参数含义 执行意义
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同上 初始化哨兵节点

Rot-schwarze Baumstruktur

<code><span>typedef</span><span>struct</span> ngx_rbtree_s ngx_rbtree_t;

<span>/* 为解决不同节点含有相同关键字的元素冲突问题所存在的指针*/</span><span>typedef</span><span>void</span> (*ngx_rbtree_insert_pt)(ngx_rbtree_node_t *root,ngx_rbtree_node_t *node,ngx_rbtreenode_t *sentinel);

<span>struct</span> ngx_rbtree_s {
    <span>//指向树的根节点(可以直接强制转化为数据元素)</span>
    ngx_rbtree_node_t       *root;
    <span>//指向NIL哨兵节点</span>
    ngx_rbtree_node_t       *sentinel;
    <span>//红黑树添加元素的指针</span>
    ngx_rbtree_insert_pt    insert;
    };</code>

Funktionen des rot-schwarzen Baumcontainers

函数名 参数含义 执行意义
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是需要删除的节点指针 删除节点,自动旋转保持特性

Urheberrechtserklärung: Schmerz ist nur in deinem Kopf.

Das Obige stellt den rot-schwarzen Baum ngx_rbtree_t vor, einschließlich der relevanten Inhalte. Ich hoffe, dass er Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein wird.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn