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

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