2009-11-04 2 views
1

Привет, я работаю над проблемой и могу сделать с некоторой помощью, я работаю в C#.Дерево как структура данных

Что я пытаюсь сделать, это создать структуру данных следующим образом:

мне нужно макет из элемента с й и у координат на странице. Теперь фактическая прокладка не проблема, это скорее наличие правильного набора координат.

Каждый элемент в моем списке может иметь несколько родителей и несколько дочерних элементов, в которых исходный элемент не имеет родителей, который определяет его как начальный элемент.

Теперь все, что мне нужно сделать, это получить координаты для каждого элемента, чтобы все правильно позиционировалось с родителями над детьми в центрированном положении.

Если у элемента есть только 1 ребенок, то ребенок помещается под родителем на одну и ту же координату x, если у родителя более одного ребенка, тогда дети помещаются с равными промежутками, а родитель должен быть в середине над детьми до двух линий равной длины присоединяются к детям из родителя.

Также элемент может иметь родителей на более чем одном уровне.

У меня есть графический файл того, что я пытаюсь сделать, чтобы дать вам лучший пример, если у кого есть какие-то мысли или советы для меня. Дайте мне знать, если вы заинтересованы, и я могу отправить вам письмо с файлом.

Благодаря

+2

Каков фактический вопрос, с которым вы боретесь? или вы просто хотите, чтобы кто-то написал код для вас? Этот вопрос читается как спецификация. –

+0

Извините за то, что я не понимаю, у меня возникают проблемы с центрированием родительского элемента, так как иногда вам нужно перемещать элементы в строке на основе дочерних узлов, и эта переостановка может влиять на другие элементы в списке, поэтому они должны быть повторно -позиция и ее трудно узнать, как переставить все остальное на основе этого элемента. У меня есть длинный запрос, который делает вид создания этой структуры данных, но он иногда пробегает неправильно, и я не могу центрировать все узлы. У меня есть образ того, что я пытаюсь сделать, если это вам поможет? Спасибо Irfan. – Iffy

ответ

1

Я думаю, что это не представляется возможным без дополнительных ограничений на данные. Например, данные могут содержать цикл, и в этом случае невозможно, чтобы родители были вытянуты над дочерними элементами.

я мог придумать алгоритм, который делает то, что вам нужно для древовидного графа:

  1. снизу вверх рассчитать необходимую ширину для элемента:
    • Это 1 для листовых узлов
    • это п * х для узла T, который имеет дочерние узлы н и х ширина самого широкого ребенка
  2. макета график сверху вниз Wi по отношению к расчетной ширине узлов
+0

Спасибо за ваш ответ Ziggystar, но я забыл упомянуть, что ширина каждого элемента фиксирована.Кроме того, в нижней части может не быть максимального количества элементов, так как это то место, где оно отличается от дерева, где один из средних уровней может занимать больше места относительно количества узлов или просто узлов с минимальными и максимальными значениями на уровне. – Iffy

Смежные вопросы