如何有效地更改二进制链表中的字段?

时间:2014-10-26 05:31:56

标签: matlab

我有一段Matlab代码,本质上是一个二进制链表:

Node{1}=My_Model;
Node{2}=Node{1}.branch_link{1};
Node{3}=Node{1}.branch_link{2};
Node{4}=Node{2}.branch_link{1};
Node{5}=Node{2}.branch_link{2};
Node{6}=Node{3}.branch_link{1};
Node{7}=Node{3}.branch_link{2};
Node{8}=Node{4}.branch_link{1};
Node{9}=Node{4}.branch_link{2};
...
Node{22}=Node{14}.branch_link{1};

此处的所有节点都是“struct”类型,并且在其他字段中有一个名为“feature”的字段。我想用“featureNew”替换每个节点的“功能”。但是像

那样手动执行它是非常低效的
My_Model.branch_link{2}.branch_link{2}.branch_link{1}.branch_link{1}.feature=featureNew{22};

有没有更简单的方法(可能使用指针或引用,但我不知道它在Matlab中)?感谢。

1 个答案:

答案 0 :(得分:0)

您需要traverses the whole tree,这是使用递归函数最简单的方法。未经测试的例子:

function tree_set_struct(node, field, value)
% traverses tree in depth-first, pre-order way and sets node.field to value.
% Children are in node.branch_link, which should be an empty cell array
% for leaf nodes.

% first update current node
node.(field) = value;

% then recursively call function on all children. 
for ichild=1:length(node.branch_link)
    child = node.branch_link{ichild};
    tree_set_struct(child, field, value);
end

用法应该是

tree_set_struct(My_Model, 'feature', featureNew)