Я нашел простое рабочее решение:
Для узла есть функция, которая возвращает путь от корня. Например, в файловой системе путь к файлу может быть следующим: c: \ directory \ file.txt, где «C:», «directory» и «file.txt» являются родительскими узлами.
Предикат просто должен сравнивать пути вместе, как это делает простое сравнение строк. Путь не должен быть строкой, функция сравнения пути должна сравнивать элементы пути по одному, начиная с корня, и возвращать, как только элемент пути будет другим.
Результирующая сортировка аналогична поиску по глубине.