Что касается рисования структуры, трудно избежать столкновений (перекрещивание линий), если у вас отображается более 2 поколений. Так что, если ваше приложение позволяет вам сократить его до двух, это здорово. Я написал несколько программ, которые используют этот вид представления, либо по вертикали:
или по горизонтали:
Если вам нужно, чтобы одновременно отображалось больше поколений, вам нужно придумать другие представления, и они могут начать становиться довольно разреженными, чтобы вы могли показать всех в одном поколении на одном уровне.
Относительно того, как представлять отношения как структуры данных - ну, это грязно. Самая простая и чистая вещь состоит в том, что любые два человека, которые являются соответственно матерью и отцом одного и того же человека, «женаты». Но как вы хотите представлять нескольких партнеров, приемных детей и тому подобное? Трудно ответить, не зная больше о том, что ваша программа должна делать. Может быть, ваш набор данных не имеет этих осложнений. Если это произойдет, то лучше сначала продумать сложные случаи - простые представления не поддаются легкому расширению для охвата сложных случаев.
Нарисуйте (от руки) несколько самых сложных случаев, которые вы ожидаете; это подскажет, какие данные вам нужно записать и как их организовать. Выбор, который вы делаете при рисовании (кто идет первым, какие символы и текст использовать на каждом узле и т. Д.), Будет определять ваши решения относительно структуры данных.
Установка матери B и ребенка A кажется избыточной - а избыточность приводит к ошибкам - выберите одну. Который из? Ну, есть больше информации, когда вы устанавливаете мать B (пол A), и мы знаем, что любому человеку понадобятся ровно два родителя, а не 0 или более детей. Так что я бы предпочел, чтобы просто установил мать Б; вы всегда можете узнать детей любого человека, перебирая все, чтобы выбрать набор, родитель которого равен данному человеку. А на самом деле хранение отношений между матерью и отцом (по сравнению с простыми отношениями с родителями) может уменьшить дублирование (при условии, что вы сохраняете пол с людьми).