Рис. 1
Элементы H2, H3, H4 определяют "головы" новых наборов и одновременно являются членами наборов "верхнего уровня" - при этом структура набора оказывается адекватной для реализации динамических "вложенных" понятий предметной области. Например, в ассоциацию H1-"Акционеры" могут входить как отдельные частные лица, так и коллективы - организации, которые являются ассоциациями собственных акционеров.
Элементы H2, H3, H4 на приведенной иллюстрации участвуют в двух связях - горизонтальной (связь между членами одного набора) и вертикальной (связь с членами "своего собственного" набора). Эта терминология часто используется для организации так называемых ортогональных списков, моделирующих структуры динамически изменяющегося плоского "игрового поля": "разреженных" матриц, "кроссвордов", цепей "домино" и т.д. Понятие "игрового поля", разумеется, не означает, что ортогональные списки используются лишь в игровых задачах.
1.4.3. Дерево
Еще один пример рекурсивной структуры, широко использующейся в программировании - структура дерева. Деревом называется совокупность связанных элементов - вершин дерева, включающая в себя один особый элемент - корень, при этом все остальные элементы образуют поддеревья. Наиболее широко используется структура бинарного дерева, все множество вершин которого делится (по отношению к корню) на два подмножества - два поддерева (левое и правое). Любая вершина бинарного дерева реализуется на связанной памяти элементом с двумя связями: с левым поддеревом и с правым.
К
Информационное поле
Связь с левым потомком
Связь с правым потомком
Л1 Л2 Л3
Рис. 2
На этой иллюстрации изображена структура бинарного дерева на связанной памяти, здесь К – корень; Л1,Л2,Л3 – "листья" – вершины с "пустыми" связями ("не выросшими" поддеревьями).
Заметим, что в этой интерпретации дерево реализуется на однородных списках (в отличие от набора). Особое положение корня определяется единственным свойством – отсутствием вершин-предков, любой лист дерева характеризуется полным отсутствием вершин-потомков. Поскольку любая вершина в связанной структуре дерева открывает доступ только "вниз" (только к своим поддеревьям), она может интерпретироваться как корень соответствующего поддерева. В этом смысле лист является корнем "не выросшего" дерева и определяет его своеобразную "точку роста". Включение в дерево новой вершины и удаление старой не должно нарушать общего отношения порядка на множестве вершин.