Main Page | Data Structures | File List | Data Fields | Globals

avltree.h File Reference

Balanced binary tree. More...


Typedefs

typedef _AVLTree AVLTree
 An AVL tree balanced binary tree.
typedef _AVLTreeNode AVLTreeNode
 A node in an AVL tree.
typedef int(* AVLTreeCompareFunc )(void *data1, void *data2)
 Type of function used to compare keys in an AVL tree.

Functions

AVLTreeavltree_new (AVLTreeCompareFunc compare_func)
 Create a new AVL tree.
void avltree_free (AVLTree *tree)
 Destroy an AVL tree.
AVLTreeNodeavltree_insert (AVLTree *tree, void *key, void *value)
 Insert a new key-value pair into an AVL tree.
void avltree_remove_node (AVLTree *tree, AVLTreeNode *node)
 Remove a node from a tree.
int avltree_remove (AVLTree *tree, void *key)
 Remove an entry from a tree, specifying the key of the node to remove.
AVLTreeNodeavltree_lookup_node (AVLTree *tree, void *key)
 Search an AVL tree for a node with a particular key.
void * avltree_lookup (AVLTree *tree, void *key)
 Search an AVL tree for a value corresponding to a particular key.
AVLTreeNodeavltree_root_node (AVLTree *tree)
 Find the root node of a tree.
void * avltree_node_key (AVLTreeNode *node)
 Retrieve the key for a given tree node.
void * avltree_node_value (AVLTreeNode *node)
 Retrieve the value at a given tree node.
AVLTreeNodeavltree_node_left_child (AVLTreeNode *node)
 Find the left child of a given tree node.
AVLTreeNodeavltree_node_right_child (AVLTreeNode *node)
 Find the right child of a given tree node.
AVLTreeNodeavltree_node_parent (AVLTreeNode *node)
 Find the parent node of a given tree node.
int avltree_subtree_height (AVLTreeNode *node)
 Find the height of a subtree.
void ** avltree_to_array (AVLTree *tree)
 Convert the keys in an AVL tree into a C array.
int avltree_num_entries (AVLTree *tree)
 Retrieve the number of entries in the tree.


Detailed Description

Balanced binary tree.

The AVL tree structure is a balanced binary tree which stores a collection of nodes (see AVLTreeNode). Each node has a key and a value associated with it. The nodes are sorted within the tree based on the order of their keys. Modifications to the tree are constructed such that the tree remains balanced at all times (there are always roughly equal numbers of nodes on either side of the tree).

Balanced binary trees have several uses. They can be used as a mapping (searching for a value based on its key), or as a set of keys which is always ordered.

To create a new AVL tree, use avltree_new. To destroy an AVL tree, use avltree_free.

To insert a new key-value pair into an AVL tree, use avltree_insert. To remove an entry from an AVL tree, use avltree_remove or avltree_remove_node.

To search an AVL tree, use avltree_lookup or avltree_lookup_node.

Tree nodes can be queried using the avltree_node_left_child, avltree_node_right_child, avltree_node_parent, avltree_node_key and avltree_node_value functions.


Typedef Documentation

typedef struct _AVLTree AVLTree
 

An AVL tree balanced binary tree.

See also:
avltree_new

typedef int(* AVLTreeCompareFunc)(void *data1, void *data2)
 

Type of function used to compare keys in an AVL tree.

Parameters:
data1 The first key.
data2 The second key.
Returns:
A negative number if data1 should be sorted before data2, a positive number if data2 should be sorted before data1, zero if the two keys are equal.

typedef struct _AVLTreeNode AVLTreeNode
 

A node in an AVL tree.

See also:
avltree_node_left_child

avltree_node_right_child

avltree_node_parent

avltree_node_key

avltree_node_value


Function Documentation

void avltree_free AVLTree tree  ) 
 

Destroy an AVL tree.

Parameters:
tree The tree to destroy.

AVLTreeNode* avltree_insert AVLTree tree,
void *  key,
void *  value
 

Insert a new key-value pair into an AVL tree.

Parameters:
tree The tree.
key The key to insert.
value The value to insert.
Returns:
The newly created tree node containing the key and value.

void* avltree_lookup AVLTree tree,
void *  key
 

Search an AVL tree for a value corresponding to a particular key.

This uses the tree as a mapping. Note that this performs identically to avltree_lookup_node, except that the value at the node is returned rather than the node itself.

Parameters:
tree The AVL tree to search.
key The key to search for.
Returns:
The value associated with the given key, or NULL if no entry with the given key is found.

AVLTreeNode* avltree_lookup_node AVLTree tree,
void *  key
 

Search an AVL tree for a node with a particular key.

This uses the tree as a mapping.

Parameters:
tree The AVL tree to search.
key The key to search for.
Returns:
The tree node containing the given key, or NULL if no entry with the given key is found.

AVLTree* avltree_new AVLTreeCompareFunc  compare_func  ) 
 

Create a new AVL tree.

Parameters:
compare_func Function to use when comparing keys in the tree.
Returns:
A new AVL tree.

void* avltree_node_key AVLTreeNode node  ) 
 

Retrieve the key for a given tree node.

Parameters:
node The tree node.
Returns:
The key to the given node.

AVLTreeNode* avltree_node_left_child AVLTreeNode node  ) 
 

Find the left child of a given tree node.

Parameters:
node The tree node.
Returns:
The left child of the tree node, or NULL if the node has no left child.

AVLTreeNode* avltree_node_parent AVLTreeNode node  ) 
 

Find the parent node of a given tree node.

Parameters:
node The tree node.
Returns:
The parent node of the tree node, or NULL if this is the root node.

AVLTreeNode* avltree_node_right_child AVLTreeNode node  ) 
 

Find the right child of a given tree node.

Parameters:
node The tree node.
Returns:
The right child of the tree node, or NULL if the node has no right child.

void* avltree_node_value AVLTreeNode node  ) 
 

Retrieve the value at a given tree node.

Parameters:
node The tree node.
Returns:
The value at the given node.

int avltree_num_entries AVLTree tree  ) 
 

Retrieve the number of entries in the tree.

Parameters:
tree The tree.
Returns:
The number of key-value pairs stored in the tree.

int avltree_remove AVLTree tree,
void *  key
 

Remove an entry from a tree, specifying the key of the node to remove.

Parameters:
tree The tree.
key The key of the node to remove.
Returns:
Zero (false) if no node with the specified key was found in the tree, non-zero (true) if a node with the specified key was removed.

void avltree_remove_node AVLTree tree,
AVLTreeNode node
 

Remove a node from a tree.

Parameters:
tree The tree.
node The node to remove

AVLTreeNode* avltree_root_node AVLTree tree  ) 
 

Find the root node of a tree.

Parameters:
tree The tree.
Returns:
The root node of the tree, or NULL if the tree is empty.

int avltree_subtree_height AVLTreeNode node  ) 
 

Find the height of a subtree.

Parameters:
node The root node of the subtree.
Returns:
The height of the subtree.

void** avltree_to_array AVLTree tree  ) 
 

Convert the keys in an AVL tree into a C array.

This allows the tree to be used as an ordered set.

Parameters:
tree The tree.
Returns:
A newly allocated C array containing all the keys in the tree, in order. The length of the array is equal to the number of entries in the tree (see avltree_num_entries).


Generated on Mon Jan 30 18:56:23 2006 for C Algorithms by  doxygen 1.4.4