If I found the correct app, it seems to be limited to six generations, and repeats a surname in each generation. What would be nice (and I believe corresponds to the request for displaying the "tops of my tree") would be if each surname was only last in the "last" generation, and (unless filtered) did not stop generating names until it reached the profile with "unknown father".
The Brick Walls (wikitree.com) app is also GREAT! In its current form, it does much of what I was looking for: the link to the "tree top" profile, date and place of birth are listed in an easy-to-read format.
A few observations:
1) The app appears to list profiles missing at least one parent, whereas a "top of the tree" list would only list profiles for which both parents were unknown.
2) The scope appears to be limited to 10 generations, which makes sense in the context of "roadblocks". If the "top of the tree" is 9GGF and beyond, but the 10th generation profile has both parents connected, then that surname does not appear at all. In my case, this meant that the Stout, Klinckenberg, Walton, Bowling, Lucas, Cowgill, Scott, Woodley, Dark and Bush surnames did not appear in the list. For the "top of the tree" list, those lines would each be followed as long as a father's profile is connected, and a new line created whenever a mother's profile is encountered.
3) It would be nice if the list could indicate the "generational distance" as well as the birth date.
I imagine a basic algorithm which might be summarized as follows:
a) begin with focus on any Profile-ID (START-ID). Set the top-of-tree counter "n" = 1.
b) if the profile in focus (FOCUS-ID) has a father, the father's profile takes the focus.
c) if the FOCUS-ID does not have a father, create a "top of the tree" record (TOP-ID#n): store the current FOCUS-ID, surname, birthdate, birthplace and relationship to START-ID in a record indexed with #n. Increase #n by 1.
Whenever a TOP-ID is encountered (FOCUS-ID = latest TOP-ID), proceed as follows:
d) IF the current FOCUS-ID profile is connected to a mother's profile, set the focus on the mother's profile and go to (b).
ELSE (current FOCUS-ID profile is not connected to a mother's profile), identify the "child" of the current profile with a direct relationship to the START-ID, set the focus on that child profile, and repeat step (d).
The result will be a stored array containing all "top-of-the-tree" profiles, indexed as they would appear in a fan-chart from left to right, which could be filtered, re-sorted and displayed in various ways (possibly exported in csv, json, html or other formats). To avoid unnecessary duplication of processing, it might be possible to create and store such indexed arrays for at least the most connected, older profiles (perhaps pre-1900), and update the array for any of those profiles when changes to parent connections are detected. That way, any current user profile would only need to run the first few generations "live" - thousands of cousins will share the same "tree-tops" if they share the same 4GGF...