NAME

RB_Tree - Implements a Red-Black Tree ADT, according to T. H. Corman, C. E. Leiserson, and R. L. Rivest, "Introduction to Algorithms" 1990, MIT, chapter 14

SYNOPSIS

#include <ace/RB_Tree.h>

template<class KEY, class T> class RB_Tree { public: RB_Tree (void); RB_Tree (const RB_Tree<KEY, T> &rbt); virtual ~RB_Tree (void); void operator= (const RB_Tree<KEY, T> &rbt); virtual int lessthan (const KEY &k1, const KEY &k2); T* find (const KEY &k); T* insert (const KEY &k, const T &t); int remove (const KEY &k); void clear (void); void RB_rotate_right (RB_Tree_Node<KEY, T> * x); void RB_rotate_left (RB_Tree_Node<KEY, T> * x); void RB_delete_fixup (RB_Tree_Node<KEY, T> * x); RB_Tree_Node<KEY, T> * RB_tree_successor ( RB_Tree_Node<KEY, T> *x ) const; RB_Tree_Node<KEY, T> * RB_tree_predecessor ( RB_Tree_Node<KEY, T> *x ) const; RB_Tree_Node<KEY, T> * RB_tree_minimum ( RB_Tree_Node<KEY, T> *x ) const; RB_Tree_Node<KEY, T> * RB_tree_maximum ( RB_Tree_Node<KEY, T> *x ) const; RB_Tree_Node<KEY, T> * find_node (const KEY &k); void RB_rebalance (RB_Tree_Node<KEY, T> * x); RB_Tree_Node<KEY, T> *root_; };

Initialization and termination methods.

RB_Tree (void);

RB_Tree (const RB_Tree<KEY, T> &rbt);

virtual ~RB_Tree (void);

void operator= (const RB_Tree<KEY, T> &rbt);

virtual int lessthan (const KEY &k1, const KEY &k2);

T* find (const KEY &k);

T* insert (const KEY &k, const T &t);

int remove (const KEY &k);

void clear (void);

These could all be made private methods by making the corresponding class template instantiations friends, but there are some problems with this on certain compilers: leave them all public for now private:

void RB_rotate_right (RB_Tree_Node<KEY, T> * x);

void RB_rotate_left (RB_Tree_Node<KEY, T> * x);

void RB_delete_fixup (RB_Tree_Node<KEY, T> * x);

RB_Tree_Node<KEY, T> * RB_tree_successor (
    RB_Tree_Node<KEY, T> *x
    ) const;

RB_Tree_Node<KEY, T> * RB_tree_predecessor (
    RB_Tree_Node<KEY, T> *x
    ) const;

RB_Tree_Node<KEY, T> * RB_tree_minimum (
    RB_Tree_Node<KEY, T> *x
    ) const;

RB_Tree_Node<KEY, T> * RB_tree_maximum (
    RB_Tree_Node<KEY, T> *x
    ) const;

RB_Tree_Node<KEY, T> * find_node (const KEY &k);

void RB_rebalance (RB_Tree_Node<KEY, T> * x);

private members

RB_Tree_Node<KEY, T> *root_;

AUTHOR

Chris Gill

LIBRARY

ace