Сортировка узлов по глубине может быть выполнена с помощью топологической сортировки . Однако это будет работать только с графами, которые не содержат циклов. Ваша проблема звучит так, как будто на графике есть циклы. Один из вариантов - найти циклы (см. Алгоритм Черепаха и Заяц , чтобы узнать, как это сделать) и разорвать цикл, записав, где вы его сломали. Затем сортируйте узлы и повторно связывайте.
Если вы делаете это для целей визуализации, есть библиотека рендеринга графиков под названием GraphViz , которая делает нечто очень похожее на то, что вы описываете, а затем выкладывает узлы. Его легко интегрировать и использовать, и он будет отображаться на экране или в различных форматах вывода.