<p>Should operations that could take some time be performed in a constructor or should the object be constructed and then initialised later.</p>

<p>For example when constructing an object that represents a directory structure should the population of the object and its children be done in the constructor. Clearly, a directory can contain directories and which in turn can contain directories and so on.</p>

<p>What is the elegant solution to this?</p>

You usually do not want the constructor to do any computation.  Someone else using the code will not expect that it does more than basic set-up.
For a directory tree like you're talking about, the "elegant" solution is probably not to build a full tree when the object is constructed.  Instead, build it on demand.  Someone using your object may not really care what is in sub-directories, so start out by just having your constructor list the first level, and then if someone wants to descend into a specific directory, then build that portion of the tree when they request it.