我有一个二进制树,可以在MATLAB中作为单元格数组访问(例如a{1}{2}
)。我能够编写一个能够访问树的所有边缘节点的递归函数(下面)。我的下一个任务是用其他值替换边缘节点处的值。但是,我在这方面遇到了困难。每次调用递归函数时,值都不会保留其新值,而是恢复到原始值。有没有一种简单的方法可以确保值在函数中保持更新?谢谢!
以下是代码:
function findLeaves(a)
if(iscellstr(a) == 1) % just above fringe node
a{2} = 2; %change fringe node to value 2
else
if(length(a) == 3 || length(a) == 2) % go left
findLeaves(a{2});
end
if (length(a) == 3) % go right
findLeaves(a{3});
end
end
end
答案 0 :(得分:0)
在matlab中,内置数据类型的标准调用是value,这意味着传递的参数受到保护,不受函数中所做的更改的影响。例外是图形句柄,java句柄和从handle类类型继承的类。
因此,您必须将更改的结果作为输出传递,以便保留计算值。
function a = findLeaves(a)
if(iscellstr(a) == 1) % just above fringe node
a{2} = 2; %change fringe node to value 2
else
if(length(a) == 3 || length(a) == 2) % go left
a{2}=findLeaves(a{2});
end
if (length(a) == 3) % go right
a{3}=findLeaves(a{3});
end
end