The first question is how to determine the assemblies to be searched. System.Reflection.Assembly provides a number of methods for listing certain types of assemblies - for example GetReferencedAssemblies() will find assemblies referenced by a given assembly - useful if you have Assembly C (which refernces B and A), but not if you just have Assembly A (which references none). You could also scan the disk, or other methods, depending on your needs.
Once you've determined how to iterate assemblies, use the technique from this item to find classes that derive from the class in question:
http://stackoverflow.com/questions/2362580/discovering-derived-types-using-reflection
Apply this logic recursively until you reach the end of the tree. The commenter on your question is right - the tree may have multiple branches.
I do not know why you'd want to use Linq to do this - Linq does not seem built for this type of question. I have not personally found a way to do recursion or queue-based operations well inside of Linq. I'd just use C# or VB plain statements for this rather than Linq.