|  | 
|  | tree (const T &) | 
|  | 
|  | tree (const iterator_base &) | 
|  | 
|  | tree (const tree< T, tree_node_allocator > &) | 
|  | 
| void | operator= (const tree< T, tree_node_allocator > &) | 
|  | 
| pre_order_iterator | begin () const | 
|  | Return iterator to the beginning of the tree. 
 | 
|  | 
| pre_order_iterator | end () const | 
|  | Return iterator to the end of the tree. 
 | 
|  | 
| post_order_iterator | begin_post () const | 
|  | Return post-order iterator to the beginning of the tree. 
 | 
|  | 
| post_order_iterator | end_post () const | 
|  | Return post-order iterator to the end of the tree. 
 | 
|  | 
| fixed_depth_iterator | begin_fixed (const iterator_base &, unsigned int) const | 
|  | Return fixed-depth iterator to the first node at a given depth. 
 | 
|  | 
| fixed_depth_iterator | end_fixed (const iterator_base &, unsigned int) const | 
|  | Return fixed-depth iterator to end of the nodes at given depth. 
 | 
|  | 
| sibling_iterator | begin (const iterator_base &) const | 
|  | Return sibling iterator to the first child of given node. 
 | 
|  | 
| sibling_iterator | end (const iterator_base &) const | 
|  | Return sibling iterator to the end of the children of a given node. 
 | 
|  | 
| template<typename iter > | 
| iter | parent (iter) const | 
|  | Return iterator to the parent of a node. 
 | 
|  | 
| template<typename iter > | 
| iter | previous_sibling (iter) const | 
|  | Return iterator to the previous sibling of a node. 
 | 
|  | 
| template<typename iter > | 
| iter | next_sibling (iter) const | 
|  | Return iterator to the next sibling of a node. 
 | 
|  | 
| template<typename iter > | 
| iter | next_at_same_depth (iter) const | 
|  | Return iterator to the next node at a given depth. 
 | 
|  | 
| void | clear () | 
|  | Erase all nodes of the tree. 
 | 
|  | 
| template<typename iter > | 
| iter | erase (iter) | 
|  | Erase element at position pointed to by iterator, return incremented iterator. 
 | 
|  | 
| void | erase_children (const iterator_base &) | 
|  | Erase all children of the node pointed to by iterator. 
 | 
|  | 
| template<typename iter > | 
| iter | append_child (iter position) | 
|  | Insert empty node as last child of node pointed to by position. 
 | 
|  | 
| template<typename iter > | 
| iter | append_child (iter position, const T &x) | 
|  | Insert node as last child of node pointed to by position. 
 | 
|  | 
| template<typename iter > | 
| iter | append_child (iter position, iter other_position) | 
|  | Append the node (plus its children) at other_position as a child of position. 
 | 
|  | 
| template<typename iter > | 
| iter | append_children (iter position, sibling_iterator from, sibling_iterator to) | 
|  | Append the nodes in the from-to range (plus their children) as children of position. 
 | 
|  | 
| pre_order_iterator | set_head (const T &x) | 
|  | Short-hand to insert topmost node in otherwise empty tree. 
 | 
|  | 
| template<typename iter > | 
| iter | insert (iter position, const T &x) | 
|  | Insert node as previous sibling of node pointed to by position. 
 | 
|  | 
| sibling_iterator | insert (sibling_iterator position, const T &x) | 
|  | Specialisation of previous member. 
 | 
|  | 
| template<typename iter > | 
| iter | insert_subtree (iter position, const iterator_base &subtree) | 
|  | Insert node (with children) pointed to by subtree as previous sibling of node pointed to by position. 
 | 
|  | 
| template<typename iter > | 
| iter | insert_after (iter position, const T &x) | 
|  | Insert node as next sibling of node pointed to by position. 
 | 
|  | 
| template<typename iter > | 
| iter | replace (iter position, const T &x) | 
|  | Replace node at 'position' with other node (keeping same children); 'position' becomes invalid. 
 | 
|  | 
| template<typename iter > | 
| iter | replace (iter position, const iterator_base &from) | 
|  | Replace node at 'position' with subtree starting at 'from' (do not erase subtree at 'from'); see above. 
 | 
|  | 
| sibling_iterator | replace (sibling_iterator orig_begin, sibling_iterator orig_end, sibling_iterator new_begin, sibling_iterator new_end) | 
|  | Replace string of siblings (plus their children) with copy of a new string (with children); see above. 
 | 
|  | 
| template<typename iter > | 
| iter | flatten (iter position) | 
|  | Move all children of node at 'position' to be siblings, returns position. 
 | 
|  | 
| template<typename iter > | 
| iter | reparent (iter position, sibling_iterator begin, sibling_iterator end) | 
|  | Move nodes in range to be children of 'position'. 
 | 
|  | 
| template<typename iter > | 
| iter | reparent (iter position, iter from) | 
|  | Move all child nodes of 'from' to be children of 'position'. 
 | 
|  | 
| template<typename iter > | 
| iter | move_after (iter target, iter source) | 
|  | Move 'source' node (plus its children) to become the next sibling of 'target'. 
 | 
|  | 
| template<typename iter > | 
| iter | move_before (iter target, iter source) | 
|  | Move 'source' node (plus its children) to become the previous sibling of 'target'. 
 | 
|  | 
| template<typename iter > | 
| iter | move_ontop (iter target, iter source) | 
|  | Move 'source' node (plus its children) to become the node at 'target' (erasing the node at 'target'). 
 | 
|  | 
| void | merge (sibling_iterator, sibling_iterator, sibling_iterator, sibling_iterator, bool duplicate_leaves=false) | 
|  | Merge with other tree, creating new branches and leaves only if they are not already present. 
 | 
|  | 
| void | sort (sibling_iterator from, sibling_iterator to, bool deep=false) | 
|  | Sort (std::sort only moves values of nodes, this one moves children as well). 
 | 
|  | 
| template<class StrictWeakOrdering > | 
| void | sort (sibling_iterator from, sibling_iterator to, StrictWeakOrdering comp, bool deep=false) | 
|  | 
| template<typename iter > | 
| bool | equal (const iter &one, const iter &two, const iter &three) const | 
|  | Compare two ranges of nodes (compares nodes as well as tree structure). 
 | 
|  | 
| template<typename iter , class BinaryPredicate > | 
| bool | equal (const iter &one, const iter &two, const iter &three, BinaryPredicate) const | 
|  | 
| template<typename iter > | 
| bool | equal_subtree (const iter &one, const iter &two) const | 
|  | 
| template<typename iter , class BinaryPredicate > | 
| bool | equal_subtree (const iter &one, const iter &two, BinaryPredicate) const | 
|  | 
| tree | subtree (sibling_iterator from, sibling_iterator to) const | 
|  | Extract a new tree formed by the range of siblings plus all their children. 
 | 
|  | 
| void | subtree (tree &, sibling_iterator from, sibling_iterator to) const | 
|  | 
| void | swap (sibling_iterator it) | 
|  | Exchange the node (plus subtree) with its sibling node (do nothing if no sibling present). 
 | 
|  | 
| int | size () const | 
|  | Count the total number of nodes. 
 | 
|  | 
| bool | empty () const | 
|  | Check if tree is empty. 
 | 
|  | 
| int | depth (const iterator_base &) const | 
|  | Compute the depth to the root. 
 | 
|  | 
| unsigned int | number_of_children (const iterator_base &) const | 
|  | Count the number of children of node at position. 
 | 
|  | 
| unsigned int | number_of_siblings (const iterator_base &) const | 
|  | Count the number of 'next' siblings of node at iterator. 
 | 
|  | 
| bool | is_in_subtree (const iterator_base &position, const iterator_base &begin, const iterator_base &end) const | 
|  | Determine whether node at position is in the subtrees with root in the range. 
 | 
|  | 
| bool | is_valid (const iterator_base &) const | 
|  | Determine whether the iterator is an 'end' iterator and thus not actually pointing to a node. 
 | 
|  | 
| unsigned int | index (sibling_iterator it) const | 
|  | Determine the index of a node in the range of siblings to which it belongs. 
 | 
|  | 
| sibling_iterator | child (const iterator_base &position, unsigned int) const | 
|  | Inverse of 'index': return the n-th child of the node at position. 
 | 
|  | 
|  | tree (const T &) | 
|  | 
|  | tree (const iterator_base &) | 
|  | 
|  | tree (const tree< T, tree_node_allocator > &) | 
|  | 
| void | operator= (const tree< T, tree_node_allocator > &) | 
|  | 
| pre_order_iterator | begin () const | 
|  | Return iterator to the beginning of the tree. 
 | 
|  | 
| pre_order_iterator | end () const | 
|  | Return iterator to the end of the tree. 
 | 
|  | 
| post_order_iterator | begin_post () const | 
|  | Return post-order iterator to the beginning of the tree. 
 | 
|  | 
| post_order_iterator | end_post () const | 
|  | Return post-order iterator to the end of the tree. 
 | 
|  | 
| fixed_depth_iterator | begin_fixed (const iterator_base &, unsigned int) const | 
|  | Return fixed-depth iterator to the first node at a given depth. 
 | 
|  | 
| fixed_depth_iterator | end_fixed (const iterator_base &, unsigned int) const | 
|  | Return fixed-depth iterator to end of the nodes at given depth. 
 | 
|  | 
| sibling_iterator | begin (const iterator_base &) const | 
|  | Return sibling iterator to the first child of given node. 
 | 
|  | 
| sibling_iterator | end (const iterator_base &) const | 
|  | Return sibling iterator to the end of the children of a given node. 
 | 
|  | 
| template<typename iter > | 
| iter | parent (iter) const | 
|  | Return iterator to the parent of a node. 
 | 
|  | 
| template<typename iter > | 
| iter | previous_sibling (iter) const | 
|  | Return iterator to the previous sibling of a node. 
 | 
|  | 
| template<typename iter > | 
| iter | next_sibling (iter) const | 
|  | Return iterator to the next sibling of a node. 
 | 
|  | 
| template<typename iter > | 
| iter | next_at_same_depth (iter) const | 
|  | Return iterator to the next node at a given depth. 
 | 
|  | 
| void | clear () | 
|  | Erase all nodes of the tree. 
 | 
|  | 
| template<typename iter > | 
| iter | erase (iter) | 
|  | Erase element at position pointed to by iterator, return incremented iterator. 
 | 
|  | 
| void | erase_children (const iterator_base &) | 
|  | Erase all children of the node pointed to by iterator. 
 | 
|  | 
| template<typename iter > | 
| iter | append_child (iter position) | 
|  | Insert empty node as last child of node pointed to by position. 
 | 
|  | 
| template<typename iter > | 
| iter | append_child (iter position, const T &x) | 
|  | Insert node as last child of node pointed to by position. 
 | 
|  | 
| template<typename iter > | 
| iter | append_child (iter position, iter other_position) | 
|  | Append the node (plus its children) at other_position as a child of position. 
 | 
|  | 
| template<typename iter > | 
| iter | append_children (iter position, sibling_iterator from, sibling_iterator to) | 
|  | Append the nodes in the from-to range (plus their children) as children of position. 
 | 
|  | 
| pre_order_iterator | set_head (const T &x) | 
|  | Short-hand to insert topmost node in otherwise empty tree. 
 | 
|  | 
| template<typename iter > | 
| iter | insert (iter position, const T &x) | 
|  | Insert node as previous sibling of node pointed to by position. 
 | 
|  | 
| sibling_iterator | insert (sibling_iterator position, const T &x) | 
|  | Specialisation of previous member. 
 | 
|  | 
| template<typename iter > | 
| iter | insert_subtree (iter position, const iterator_base &subtree) | 
|  | Insert node (with children) pointed to by subtree as previous sibling of node pointed to by position. 
 | 
|  | 
| template<typename iter > | 
| iter | insert_after (iter position, const T &x) | 
|  | Insert node as next sibling of node pointed to by position. 
 | 
|  | 
| template<typename iter > | 
| iter | replace (iter position, const T &x) | 
|  | Replace node at 'position' with other node (keeping same children); 'position' becomes invalid. 
 | 
|  | 
| template<typename iter > | 
| iter | replace (iter position, const iterator_base &from) | 
|  | Replace node at 'position' with subtree starting at 'from' (do not erase subtree at 'from'); see above. 
 | 
|  | 
| sibling_iterator | replace (sibling_iterator orig_begin, sibling_iterator orig_end, sibling_iterator new_begin, sibling_iterator new_end) | 
|  | Replace string of siblings (plus their children) with copy of a new string (with children); see above. 
 | 
|  | 
| template<typename iter > | 
| iter | flatten (iter position) | 
|  | Move all children of node at 'position' to be siblings, returns position. 
 | 
|  | 
| template<typename iter > | 
| iter | reparent (iter position, sibling_iterator begin, sibling_iterator end) | 
|  | Move nodes in range to be children of 'position'. 
 | 
|  | 
| template<typename iter > | 
| iter | reparent (iter position, iter from) | 
|  | Move all child nodes of 'from' to be children of 'position'. 
 | 
|  | 
| template<typename iter > | 
| iter | move_after (iter target, iter source) | 
|  | Move 'source' node (plus its children) to become the next sibling of 'target'. 
 | 
|  | 
| template<typename iter > | 
| iter | move_before (iter target, iter source) | 
|  | Move 'source' node (plus its children) to become the previous sibling of 'target'. 
 | 
|  | 
| template<typename iter > | 
| iter | move_ontop (iter target, iter source) | 
|  | Move 'source' node (plus its children) to become the node at 'target' (erasing the node at 'target'). 
 | 
|  | 
| void | merge (sibling_iterator, sibling_iterator, sibling_iterator, sibling_iterator, bool duplicate_leaves=false) | 
|  | Merge with other tree, creating new branches and leaves only if they are not already present. 
 | 
|  | 
| void | sort (sibling_iterator from, sibling_iterator to, bool deep=false) | 
|  | Sort (std::sort only moves values of nodes, this one moves children as well). 
 | 
|  | 
| template<class StrictWeakOrdering > | 
| void | sort (sibling_iterator from, sibling_iterator to, StrictWeakOrdering comp, bool deep=false) | 
|  | 
| template<typename iter > | 
| bool | equal (const iter &one, const iter &two, const iter &three) const | 
|  | Compare two ranges of nodes (compares nodes as well as tree structure). 
 | 
|  | 
| template<typename iter , class BinaryPredicate > | 
| bool | equal (const iter &one, const iter &two, const iter &three, BinaryPredicate) const | 
|  | 
| template<typename iter > | 
| bool | equal_subtree (const iter &one, const iter &two) const | 
|  | 
| template<typename iter , class BinaryPredicate > | 
| bool | equal_subtree (const iter &one, const iter &two, BinaryPredicate) const | 
|  | 
| tree | subtree (sibling_iterator from, sibling_iterator to) const | 
|  | Extract a new tree formed by the range of siblings plus all their children. 
 | 
|  | 
| void | subtree (tree &, sibling_iterator from, sibling_iterator to) const | 
|  | 
| void | swap (sibling_iterator it) | 
|  | Exchange the node (plus subtree) with its sibling node (do nothing if no sibling present). 
 | 
|  | 
| int | size () const | 
|  | Count the total number of nodes. 
 | 
|  | 
| bool | empty () const | 
|  | Check if tree is empty. 
 | 
|  | 
| int | depth (const iterator_base &) const | 
|  | Compute the depth to the root. 
 | 
|  | 
| unsigned int | number_of_children (const iterator_base &) const | 
|  | Count the number of children of node at position. 
 | 
|  | 
| unsigned int | number_of_siblings (const iterator_base &) const | 
|  | Count the number of 'next' siblings of node at iterator. 
 | 
|  | 
| bool | is_in_subtree (const iterator_base &position, const iterator_base &begin, const iterator_base &end) const | 
|  | Determine whether node at position is in the subtrees with root in the range. 
 | 
|  | 
| bool | is_valid (const iterator_base &) const | 
|  | Determine whether the iterator is an 'end' iterator and thus not actually pointing to a node. 
 | 
|  | 
| unsigned int | index (sibling_iterator it) const | 
|  | Determine the index of a node in the range of siblings to which it belongs. 
 | 
|  | 
| sibling_iterator | child (const iterator_base &position, unsigned int) const | 
|  | Inverse of 'index': return the n-th child of the node at position. 
 | 
|  |