- /**
- * Arranges the order of childern for each node of this Phylogeny in such a
- * way that either the branch with more children is on top (right) or on
- * bottom (left), dependent on the value of boolean order.
- *
- * @param order
- * decides in which direction to order
- */
- public void orderAppearance( final boolean order ) throws RuntimeException {
- if ( !isTree() ) {
- throw new FailedConditionCheckException( "Attempt to order appearance on phylogeny which is not tree-like." );
- }
- if ( isEmpty() ) {
- return;
- }
- orderAppearanceHelper( getRoot(), order );
- }
-
- // Helper method for "orderAppearance(boolean)".
- // Traverses this Phylogeny recusively.
- private void orderAppearanceHelper( final PhylogenyNode n, final boolean order ) {
- if ( n.isExternal() ) {
- return;
- }
- else {
- PhylogenyNode temp = null;
- // FIXME
- if ( ( n.getNumberOfDescendants() == 2 )
- && ( n.getChildNode1().getNumberOfExternalNodes() != n.getChildNode2().getNumberOfExternalNodes() )
- && ( ( n.getChildNode1().getNumberOfExternalNodes() < n.getChildNode2().getNumberOfExternalNodes() ) == order ) ) {
- temp = n.getChildNode1();
- n.setChild1( n.getChildNode2() );
- n.setChild2( temp );
- }
- for( int i = 0; i < n.getNumberOfDescendants(); ++i ) {
- orderAppearanceHelper( n.getChildNode( i ), order );
- }
- }
- }
-