Next: , Previous: uTraverse, Up: Private Routines


3.2.18 Walk

Walk a tree, performing an action at specified traversals of each node.

Synopsis

     #include <rbtree/rbtree.h>
     
     
     
static int Walk( Tree *tree, Node *node, int (*action)(void *data,Visit visit,unsigned long level), SiblingOrder sibling_order, Visit visit, unsigned long level );

Parameters

Tree *tree
the tree to walk
Node *node
the node at which to start. must be ROOT(tree)
int (*action)(void *data,Visit visit,unsigned long level)
the action routine
SiblingOrder sibling_order
the order in which to walk
          
          
Possible values for a SiblingOrder are as follows: LEFT_TO_RIGHT, RIGHT_TO_LEFT
Visit visit
the traversal(s) at which to call the action routine
          
          
Possible values for a Visit are as follows: PRE_ORDER, IN_ORDER, POST_ORDER
unsigned long level
the level of the passed node. ‘0’ if the root node.

Description

Walk traverse a tree, calling a user supplied action routine at selectable traversals of each node (any combination of pre-order, in-order, or post-order). The action routine is informed of which node traversal and which tree level it is called from. the walk is aborted if the action routine returns non-zero.

The traversals at which the action routine is called at are specified by the logical or of PRE_ORDER, IN_ORDER, or POST_ORDER.

Returns

If the action routines all return ‘0’, it returns ‘0’, else it returns the value returned by the last action routine called.