Esempio n. 1
0
rb_node_t * rbt_pre(rb_node_t * z)
{
	if(z == NIL_NODE){
		return z;
	}

	if(l(z) != NIL_NODE){
		return rbt_max(l(z));
	}

	rb_node_t *x = z;
	while(p(x) != NIL_NODE && x == l(p(x))){
		x = p(x);
	}
	return p(x);
}
Esempio n. 2
0
rbnode_t * rbt_predecessor(rbtree_t *T,rbnode_t *x)
{
    rbnode_t *y;
    if (x->l != &T->nil) {
        y = rbt_max(T,x->l);
    } else {
        y = x->p;
        while ((y != &T->nil) && (y->l == x)) {
            x = y;
            y = x->p;
        }
        if (y == &T->nil) {
            y = 0;
        }
    }
    return y;
}