Мне нужно отобразить ациклический ориентированный граф, который выглядит примерно так:
Я создал вложенную иерархическую структуру данных, похожую на эту:
[
{
node: 'abs'
children: [
{
node: 'jhg',
children: [{...}]
{
node: 'AAA',
children: [{...}]
},
{
node: 'fer'
children: [
{
node: 'AAA',
children: [{...}]
{
node: 'xcv',
children: [{...}]
},
{
]
Я не уверен, является ли это лучшим способом для фактического отображения данных, поскольку узлы с несколькими родителями и их дочерними элементами появлялись бы несколько раз, но я пока не представлял, как с этим справиться.
Я просто хочу отобразить эти узлы в воображаемой сетке. Поэтому мне нужно проанализировать мою структуру данных и установить их значения сетки. Проблема в том, что я не знаю, как анализировать структуру данных с помощью логики иерархии.
То, что я сейчас делаю, явно вызывает проблемы для узлов с несколькими родителями:
for (const root of allRoots) {
currentLevel = 0;
if (root.node === 'VB8') {
getChildrenTree(root);
}
}
function getChildrenTree(node) {
currentLevel++;
node._gridX = currentLevel;
if (node.children.length > 0) {
for(const nextChild of children ) {
getChildrenTree(nextChild);
}
}
Проблема с этим кодом заключается в том, что он будет проходить только по одному пути и затем остановится, когда нет дочерних элементов.
Мне просто нужен алгоритм, который проходит через дерево и устанавливает уровень иерархии каждого узла.
Я надеюсь, что это не слишком смущает.