0

我有一个二叉树,它在 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
4

1 回答 1

0

在 matlab 中,内置数据类型的标准调用是按,这意味着传递的参数受到保护,不会在函数中进行更改。例外是图形句柄、java 句柄和继承自句柄类类型的类。

因此,您必须将更改的结果作为输出传递,以便保留计算值。

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
于 2013-08-16T01:02:00.807 回答