У меня есть карта, где мои ключи - родители, а соответствующие значения - дети указанных родителей.Эта карта может расширяться на n-глубину, если это необходимо.Карта выглядит так:
K>> obj.hierarchy
ans =
Map with properties:
Count: 3
KeyType: char
ValueType: any
K>> obj.hierarchy.keys
ans =
1×3 cell array
'Alpha' 'Bravo' 'Charlie'
K>> obj.hierarchy('Charlie')
ans =
1×1 string array
'Alpha'
K>> obj.hierarchy('Alpha')
ans =
1×2 string array
'Delta' 'Echo'
В этом случае Альфа - дитя Чарли, а Альфа имеет двухлистных детей Дельта и Эхо.У меня есть следующий рекурсивный код, который анализирует это дерево и печатает дерево последовательно:
%recursively parse hierarchy
function data = parseHierarchy(obj, parentName, name)
map = obj.hierarchy;
disp(name)
%we are at a portfoio with no children
if ~any(strcmp(map.keys,name))
return
else
positions = map(name);
for i=1:numel(positions)
positionName = positions{i};
obj.parseHierarchy(name, positionName);
end
end
end
Моя цель - вызвать эту функцию для любого данного узла в этом дереве и агрегировать значение листьев для корневого узла.Например, Delta имеет ассоциированное значение 10. Я хочу довести это значение до его родительского элемента Alpha, умножить его на некоторый скалярный вес и повторять этот процесс, пока я не смогу идти дальше.Этот процесс позволит мне получить взвешенный вклад Дельты в корневой узел, Чарли.
У меня проблемы с разработкой изменений в моей рекурсивной логике.Я хочу хранить это в идеальной структуре структур, но я не уверен, возможно ли это.Любая помощь приветствуется!