/// <summary> /// Get all unique taxon tree nodes. /// This method operates on current taxon tree in contrast to /// the full taxon tree with all taxon tree nodes. /// </summary> /// <returns>All taxon tree nodes.</returns> public virtual TaxonTreeNodeList GetTaxonTreeNodes() { TaxonTreeNodeList taxonTreeNodes; taxonTreeNodes = new TaxonTreeNodeList(true); if (Parents.IsNotEmpty()) { // Add parent taxon tree nodes. foreach (ITaxonTreeNode parentTaxonTreeNode in Parents) { GetParentTaxonTreeNode(parentTaxonTreeNode, taxonTreeNodes); } } // Add this taxon tree node. taxonTreeNodes.Add(this); if (Children.IsNotEmpty()) { // Add child taxon tree nodes. foreach (ITaxonTreeNode childTaxonTreeNode in Children) { GetChildTaxonTreeNode(childTaxonTreeNode, taxonTreeNodes); } } return(taxonTreeNodes); }
/// <summary> /// Get parent taxon tree nodes. /// This method operates on current taxon tree in contrast to /// the full taxon tree with all taxon tree nodes. /// </summary> /// <param name="taxonTreeNode">Current parent taxon tree node.</param> /// <param name="parentTaxonTreeNodes">Accumulated parent taxon tree nodes so far.</param> private void GetParentTaxonTreeNode(ITaxonTreeNode taxonTreeNode, TaxonTreeNodeList parentTaxonTreeNodes) { // Add this taxon tree node. parentTaxonTreeNodes.Merge(taxonTreeNode); if (taxonTreeNode.Parents.IsNotEmpty()) { // Add parent taxon tree nodes. foreach (ITaxonTreeNode parentTaxonTreeNode in taxonTreeNode.Parents) { GetParentTaxonTreeNode(parentTaxonTreeNode, parentTaxonTreeNodes); } } }
/// <summary> /// Get child taxon tree nodes. /// This method operates on current taxon tree in contrast to /// the full taxon tree with all taxon tree nodes. /// </summary> /// <param name="taxonTreeNode">Current child taxon tree node.</param> /// <param name="childTaxonTreeNodes">Accumulated child taxon tree nodes so far.</param> private void GetChildTaxonTreeNode(ITaxonTreeNode taxonTreeNode, TaxonTreeNodeList childTaxonTreeNodes) { // Add this taxon tree node. childTaxonTreeNodes.Merge(taxonTreeNode); if (taxonTreeNode.Children.IsNotEmpty()) { // Add child taxon tree nodes. foreach (ITaxonTreeNode childTaxonTreeNode in taxonTreeNode.Children) { GetChildTaxonTreeNode(childTaxonTreeNode, childTaxonTreeNodes); } } }