Я пытаюсь выполнить поиск в глубину (DFS) общего дерева. Цель каждого узла - узнать его уровень и максимальное количество уровней под ним. Пример дерева выглядит так:
Порядок DFS должен (я думаю) быть: 1,2,3,5,6,7,4,8,9,10,11.
То, чего я пытаюсь достичь, это:
Узел 1: Уровень 1, максимальные уровни ниже = 4
Узел 2: Уровень 2, максимальные уровни ниже = 3
Узел 3: Уровень 3, максимальные уровни ниже = 2
...
Узел 9: Уровень 2, максимальные уровни ниже = 1
Пока что я могу правильно подсчитать уровни и максимальные уровни, но всякий раз, когда я пытаюсь сохранить их в новом объекте, в конечном итоге получается комбинация чисел последнего уровня / максимального уровня (в этом примере это будет уровень = 3, максимальный уровень ниже 0. Я думаю, что он не закрывает переменные должным образом, но я должен признать, что не могу понять, как изменить его, чтобы он работал. Я предполагаю, что это должно быть какое-то вроде замыкания, но я не смог адаптировать ответы других стеков, которые я нашел на замыканиях.
var groupIDInfo={
BASE:[1], 1:[2,8,9], 2:[3,4], 3:[5], 4:[], 5:[6,7], 6:[], 7:[], 8:[],
9:[10,11], 10:[], 11:[]}
var levelInfo={};
var level=0;
var longestPath=0;
var levelAndPath=[];
function detLevels(groupIDInfo, parent){
if(!(parent in groupIDInfo)){
console.log("parent not in array");
return;
}
groupIDInfo[parent].forEach(function (child){
level++;
if (level>longestPath){
longestPath=level;
}
levelAndPath[0]=level;
levelAndPath[1]=longestPath;
levelInfo[child]=levelAndPath;
detLevels(groupIDInfo, child);
level--;
//set parent longest path
longestPath=level;
levelInfo[parent]=levelAndPath;
});
}
detLevels(groupIDInfo, "BASE");