コード例 #1
0
ファイル: rb_tree.c プロジェクト: danielandefors/c-rb-tree
void rb_insert_case3(struct rb_tree_node *n)
{
  struct rb_tree_node *p = n->parent;
  struct rb_tree_node *g = p->parent;
  struct rb_tree_node *u = g->left == p ? g->right : g->left;
  if (u && u->color == RED) {
    p->color = BLACK;
    u->color = BLACK;
    g->color = RED;
    rb_insert_case1(g);
  } else {
    rb_insert_case4(n);
  }
}
コード例 #2
0
ファイル: wmem_tree.c プロジェクト: dot-Sean/wireshark-http2
static void
rb_insert_case3(wmem_tree_t *tree, wmem_tree_node_t *node)
{
    wmem_tree_node_t *parent, *grandparent, *uncle;

    uncle = node_uncle(node);

    if (uncle && uncle->color == WMEM_NODE_COLOR_RED) {
        parent      = node->parent;
        grandparent = parent->parent;

        parent->color      = WMEM_NODE_COLOR_BLACK;
        uncle->color       = WMEM_NODE_COLOR_BLACK;
        grandparent->color = WMEM_NODE_COLOR_RED;

        rb_insert_case1(tree, grandparent);
    }
    else {
        rb_insert_case4(tree, node);
    }
}