public Phylogeny copy() {
return copy( _root );
}
+
+
/**
* Returns a deep copy of this Phylogeny.
}
final List<PhylogenyNode> nodes = getNodes( name );
if ( ( nodes == null ) || ( nodes.size() < 1 ) ) {
- throw new IllegalArgumentException( "node named [" + name + "] not found" );
+ throw new IllegalArgumentException( "node named \"" + name + "\" not found" );
}
if ( nodes.size() > 1 ) {
- throw new IllegalArgumentException( "node named [" + name + "] not unique" );
+ throw new IllegalArgumentException( "node named \"" + name + "\" not unique" );
}
return nodes.get( 0 );
}
return c;
}
+ public int getNumberOfInternalNodes() {
+ if ( isEmpty() ) {
+ return 0;
+ }
+ int c = 0;
+ for( final PhylogenyNodeIterator iter = iteratorPreorder(); iter.hasNext(); ) {
+ if ( iter.next().isInternal() ) {
+ ++c;
+ }
+ }
+ if ( !isRooted() ) {
+ --c;
+ }
+ return c;
+ }
+
/**
* Returns the sum of external Nodes of this Phylogeny (int).
*/
public void setRoot( final PhylogenyNode n ) {
_root = n;
- } // setRoot( PhylogenyNode )
+ }
/**
* Sets whether this Phylogeny is rooted or not.