It is straightforward to generalize the above algorithm to produce k most probable DTs.
when filling up the dynamic programming tables, rather than storing a single best parse for each sub-tree, we store and keep track (i.e., using back-pointers) of k-best candidates simultaneously.