If you look at Directory.GetFiles, you will find it has an overload which returns all files in subdirectories as well as the specified folder.
string files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
It would then be pretty simple to sort them using Linq methods:
var sorted = files.OrderBy(s => new FileInfo(s).Extension);
Then all you have to do is display them in whatever way your feel like!