У меня есть древовидная структура, которую мне нужно переставить (перетащить), а затем отправить изменения.Как я могу определить два дерева для определения родительских изменений?
Что будет лучшим способом захвата изменений? Как я вижу это есть два способа,
- магазин каждая команда изменение, представить список изменений затем выполнить каждый
- сериализовать дерево, а затем дифф нового дерева со старым деревом, чтобы работать вне Что изменились , а затем выполнить изменения
1 кажется простым в реализации, хотя это может быть очень расточительно, если многие повторяющиеся действия произошли (т.е. перетаскивая узлы вокруг много раз, но положить их туда, где они начали)
2 избегает вышеуказанных пр. oblem, но как я могу «разбить» деревья, чтобы определить, какие команды родительских изменений выполнить? Предположительно, есть алгоритмы для этого?
Редактировать Чтобы уточнить, каждый узел имеет «id» и «parentId». Мне нужно разрешить пользователям изменять порядок дерева (тем самым изменяя parentId некоторых узлов).
Для варианта 2, если он достаточно прост, чтобы просто сериализовать измененное дерево, а затем выполнить разницу между исходным деревом в предварительном порядке, найти тот же узел в новом дереве и записать изменение, если родители разные? это надежный подход, который не зацикливается на цикле?
Редактировать Фактически нет, это не будет работать. Мне нужно перебрать новое дерево в предзаказе и найти соответствующий узел в старом дереве, дифф родительских идентификаторов и т.д ..
Благодарности
переупорядочить, вы хотите изменить структуру дерева, сохраняя узлы такими же? – Srikanth 2010-12-01 18:01:42