matlab中的树修改

时间:2016-07-15 14:18:23

标签: matlab

我有一棵由以下结构组成的树:

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)

1 个答案:

答案 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