Не имеет большого значения, в какой системе вы находитесь, но да, обрабатывайте ее построчно, используя ifstream. Я не думаю, что существует «лучший способ» пройти через это, поскольку это текстовый файл, и кто-то может передать вам текстовый файл, отформатированный любым странным способом; поэтому вы должны учитывать это и стараться как можно лучше обрабатывать все случаи.
Итак, давайте попробуем шагнуть через, как вы можете это сделать.
Вы находитесь в цикле, обрабатывающем эту строку построчно, ваш текущий узел имеет значение NULL, так как родительский объект еще не обработан. Прочитайте в строке и найдите подчеркивание в начале строки; если parent равен null, то у нас есть строка, которую невозможно обработать, поэтому пропустите ее. Если первый символ не является подчеркиванием, установите его для текущего родительского узла и перейдите к следующей части цикла. Если есть подчеркивание и текущий родитель не равен нулю, то итерируйте оставшееся количество подчеркиваний и переберите потомков узлов внутри родителя.
На самом деле, у меня просто была идея получше, но это даст вам, по крайней мере, подумать. Приветствия, дайте мне знать, что вы придумали.