/*!
* @class RightArrayBinaryTreeIterator RightArrayBinaryTree Iterator
*
* @extends Iter
*
* @headerfile <seqan/index.h>
*
* @brief An iterator for @link RightArrayBinaryTree @endlink.
*
* @signature template <typename TSpec> class Iter<TRightArrayBinaryTree, TSpec
* >;
*
* @tparam TSpec Specialisation Tag. Types: TopDownIterator
* @tparam TRightArrayBinaryTree The @link RightArrayBinaryTree @endlink.
*
* @fn RightArrayBinaryTreeIterator#container
*
* @headerfile <seqan/index.h>
*
* @brief Container of an iterator.
*
* @signature TContainer container(iterator)
*
* @param[in] iterator An iterator.
*
* @return TContainer The container that <tt>iterator</tt> traverses.
*
* @fn RightArrayBinaryTreeIterator#getCharacter
*
* @headerfile <seqan/index.h>
*
* @brief This function returns the pivot character of the node the iterator
* currently points to.
*
* @signature TChar getCharacter(iterator);
*
* @param[in] iterator The iterator.
*
* @return TChar The resulting character.
*
* @fn RightArrayBinaryTreeIterator#getLeftChildPos
*
* @headerfile <seqan/index.h>
*
* @brief Returns the position in @link RightArrayBinaryTree @endlink of the
* left child node.
*
* @signature unsigned getLeftChildPos(iterator);
*
* @param[in] iterator The iterator.
*
* @return unsigned The left child position.
*
* @fn RightArrayBinaryTreeIterator#getSubTreeSize
*
* @headerfile <seqan/index.h>
*
* @brief Returns the number of vertices in the subtree starting at the position
* an iterator points to.
*
* @signature unsigned getSubTreeSize(iterator);
*
* @param[in] iterator The iterator.
*
* @return unsigned The subtree size.
*
* @fn RightArrayBinaryTreeIterator#getPosition
*
* @headerfile <seqan/index.h>
*
* @brief Returns the position of the iterator in the host.
*
* @signature unsigned getPosition(iterator);
*
* @param[in] iterator The iterator.
*
* @return unsigned The position.
*
* @fn RightArrayBinaryTreeIterator#getRightChildPos
*
* @headerfile <seqan/index.h>
*
* @brief Returns the position in @link RightArrayBinaryTree @endlink of the
* right child node.
*
* @signature unsigned getLeftChildPos(iterator);
*
* @param[in] iterator The iterator.
*
* @return unsigned The left child position.
*
* @fn RightArrayBinaryTreeIterator#goDown
*
* @headerfile <seqan/index.h>
*
* @brief Iterates down the leftmost edge in a @link RightArrayBinaryTree
* @endlink.
*
* @signature bool goDown(iterator);
*
* @param[in] iterator The iterator
*
* @return bool <tt>true</tt> if an edge to go down exists, otherwise
* <tt>false</tt>.
*
* @fn RightArrayBinaryTreeIterator#goLeftChild
*
* @headerfile <seqan/index.h>
*
* @brief Sets the iterator to the left child of the current node if it exists
* and returns true, otherwise the iterator does not change position and
* the function returns false.
*
* @signature bool goLeftChild(iterator);
*
* @param[in] iterator The iterator
*
* @return bool <tt>true</tt> if the edge to go down exists, otherwise
* <tt>false</tt>.
*
* @fn RightArrayBinaryTreeIterator#goRight
*
* @headerfile <seqan/index.h>
*
* @brief Iterates to the next sibling in a @link RightArrayBinaryTree @endlink.
*
* @signature bool goRight(iterator);
*
* @param[in] iterator The iterator
*
* @return bool <tt>true</tt> if the iterator could be moved, otherwise
* <tt>false</tt>.
*
* @fn RightArrayBinaryTreeIterator#goRightChild
*
* @headerfile <seqan/index.h>
*
* @brief Sets the iterator to the right child of the current node if it exists
* and returns true, otherwise the iterator does not change position and
* the function returns false.
*
* @signature bool goRightChild(iterator);
*
* @param[in] iterator The iterator.
*
* @return bool <tt>true</tt> if the edge to go down exists, otherwise
* <tt>false</tt>.
*
* @fn RightArrayBinaryTreeIterator#goUp
*
* @headerfile <seqan/index.h>
*
* @brief Iterates up one edge to the parent in a @link RightArrayBinaryTree
* @endlink.
*
* @signature bool goUp(iterator);
*
* @param[in] iterator The iterator.
*
* @return bool <tt>true</tt> if the iterator could be moved, otherwise
* <tt>false</tt>.
*
* @fn RightArrayBinaryTreeIterator#isLeaf
*
* @headerfile <seqan/index.h>
*
* @brief Tests whether a given node is a leaf or not.
*
* @signature bool isLeaf(iterator);
*
* @param[in] iterator The iterator.
*
* @return bool <tt>true</tt> if the node is a leaf.
*
* @fn RightArrayBinaryTreeIterator#setCharacter
*
* @headerfile <seqan/index.h>
*
* @brief The function sets the character of the node the iterator points to to
* character.
*
* @signature void setCharacter(iterator, character);
*
* @param[in,out] iterator The iterator.
* @param[in] character The character to be assigned to a node.
*
* @fn RightArrayBinaryTreeIterator#isRoot
*
* @headerfile <seqan/index.h>
*
* @brief Test whether a iterator points to the root node.
*
* @signature bool isRoot(iterator);
*
* @param[in] iterator The iterator.
*
* @return bool <tt>true</tt> if <tt>iterator</tt> points to the root of the
* tree, otherwise <tt>false</tt>.
*/