Замечания:
Ну прям 4-я ул. 8-го Марта с этими типами у вас получилась, ничего себе "удобнее"

, да и такое
Код:
TR3 = record // <<<
Name: string;
R2: array of TR2;
R3: array of TR3; // <<<
end;
работать видимо не будет, - замыкание на себя наблюдается, исправьте
а бегать по ячейкам массива лучше так
Код:
for i := Low(R1) to High(R1) do
В образную структуру записей что в первом посте, въезжать из-за жары сил нету, хорошо бы конкретный пример данных, и как они должны в TreeView ложиться, тогда вроде можно и упростить алгоритм заполнения веток