You will have to search using OneLevel scoping and paging. Depending on your preference, you can do this with the DirectoryEntry or the .Protocols equivalents. Further, if you are only discovering the topology of the directory (as opposed to the objects it contains), you would simply filter for containers or organizationalUnits. That should keep the size and resources required to execute such a search down.
This is how a lot of tree view controls work (only search on expand, only the scope of the node).
Ryan Dunn
Extemporaneous MumblingsThe .NET Developer's Guide to Directory Services Programming