I'm very interested in having tree container concepts in Boost.

The tree_node_map class provides an implementation to a basic tree node of variable branching size. The implementation here uses the std::map to implement the children, but this could equally be a std::list, std::vector or any suitable container; it could even be a low-level implementation (for performance) or a fixed-size array (for n-ary nodes).

I've been implementing a tree class recently where each node has: Node* first_child; Node* next_sibling;

I'm using new/delete currently, but was planning to use boost.Pool once my design has settled down.

A std::map would be too much overhead for my particular application (which tends to have deep trees with few branches).

I briefly played with one block of memory per branch and doing away with the first_child pointer, but decided to come back to that idea later. It has a problem with identifying the last node; either you need to store "branch length", or a flag to mark the end (in which case you've saved no memory; still may have a speed advantage however).

Finding the previous sibling or parent in my tree requires starting from the root node (or keeping a stack of nodes visited).

The tree class is just a wrapper around a tree node that provides access to a root element. This would need some major work and additional support (e.g. post/pre/in-order traversal iterators) if it were to be useful.

Do you have any example usage?


I wonder if it would be better to approach this from the algorithms/iterators side and come to the containers later? I.e. what operations do you need to do on the trees?

As a couple of examples I need:
 1. for_each() of first child at each node.
 2. display all node values in the tree on stdout.

I'm not yet clear what I want from the second option there. Some kind of indenting I guess.

BTW, I'm new to Boost. Is it normal to include all the Allocator stuff early on when discussing designs? I thought it would be grafted on at the end.

Darren

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to