I have a nested cell which represents a tree-structure:
CellArray={1,1,1,{1,1,1,{1,1,{1,{1 1 1 1 1 1 1 1}, 1,1},1,1},1,1,1},1,1,1,{1,1,1,1}};
Here's a simpler approach using a single while loop and repeated concatenation of the sub-cells:
temp = CellArray;
nNodes = 0;
while iscell(temp)
index = cellfun(@iscell, temp);
nNodes = nNodes + sum(index);
temp = [temp{index}];
end
And the result for the sample CellArray
in the question:
nNodes =
5
If I understand correctly, you want the number of cell elements, that are themselves cells.
Then you can go recursively through your cell cells (and numbers) and check with iscell
to see which elements are cells. See the following, where totnod ultimately gives the number of nodes.
ind=cellfun(@iscell, Chains);
totnod=sum(ind);
oldtmp=Chains(ind);
while ~isempty(oldtmp)
newtmp={};
for i=1:length(oldtmp)
ind=cellfun(@iscell, oldtmp{i});
newtmp=[newtmp,oldtmp{i}(ind)];
totnod=totnod+sum(ind);
end
oldtmp=newtmp;
end