我有一棵由以下结构组成的树:
node =
value: 4
sub: [1x4 struct]
其中每个子节点也是一个节点。
node.sub(1) =
value: 6
sub: [1x4 struct]
等。叶子节点有空子。
我想编写一个更改特定节点值的函数,如下所示:
function tree = ChangeValue(tree, path, value)
% assume length(path) = 3 here
tree.sub(path(1)).sub(path(2)).sub(path(3)).value = value;
end
如果路径长度未知,我该如何实现?
注意:根据Equality of structure objects,我可以通过使用句柄类来完成此操作。但我不想修改树的编写方式。我可以在结构中添加元素,但是我不能使它们成为类,或者使用父元素数组来表示树,因为树是vlfeat函数的输出(vl_hikmeans)
答案 0 :(得分:1)
您可以使用递归函数执行此操作,该函数将调用自身传递子树以及路径的其余部分。当路径为空(即你在最后)时,它将分配值。
function tree = ChangeValue(tree, path, value)
if isempty(path)
tree.value = value;
else
% Store the modified node Pass the node Remaining Path
% V V V
tree.sub(path(1)) = ChangeValue(tree.sub(path(1)), path(2:end), value);
end
end