code: @Nonnull
    @ReturnsMutableCopy
    public static <KEYTYPE, DATATYPE, ITEMTYPE extends ITreeItemWithID <KEYTYPE, DATATYPE, ITEMTYPE>> ICommonsList <ITEMTYPE> findAllItemsWithIDRecursive (@Nonnull final ITEMTYPE aTreeItem,
                                                                                                                                                           @Nullable final KEYTYPE aSearchID)
    {
      final ICommonsList <ITEMTYPE> aRetList = new CommonsArrayList <> ();
      TreeVisitor.visitTreeItem (aTreeItem, new DefaultHierarchyVisitorCallback <ITEMTYPE> ()
      {
        @Override
        @Nonnull
        public EHierarchyVisitorReturn onItemBeforeChildren (@Nullable final ITEMTYPE aItem)
        {
          if (aItem != null && aItem.getID ().equals (aSearchID))
            aRetList.add (aItem);
          return EHierarchyVisitorReturn.CONTINUE;
        }
      });
      return aRetList;
    }
docs: Fill all items with the same ID by linearly scanning the tree.
  
  @param <KEYTYPE>
  tree ID type
  @param <DATATYPE>
  tree data type
  @param <ITEMTYPE>
  tree item type
  @param aTreeItem
  The tree item to search. May not be <code>null</code>.
  @param aSearchID
  The ID to search. May not be <code>null</code>.
  @return A non-<code>null</code> list with all matching items.