function DescendantList = DescendantFinder(ChildrenList, vertex) %DescendantList = DescendantFinder(ChildrenList, vertex) %Input: ChildrenList: m + 1 column matrix (of integers) for an m-ary tree %Output: ParentList: a two column matrix giving the parent of each vertex [n s] = size(ChildrenList); %n = number of vertices %Find all children of inputted vertex vertexInd = find(ChildrenList(:,1) == vertex); %need to work with the index of vertex %in ChildrenList matrix Children = ChildrenList(vertexInd, find(ChildrenList(vertexInd,2:s)>0)+1); DescendantList =Children; while length(Children) > 0 %now form next generation of children NewGeneration = []; %initialize for i = 1:length(Children) childInd = find(ChildrenList(:,1) == Children(i)); NewChildren = ChildrenList(childInd, find(ChildrenList(childInd,2:s)>0)+1); NewGeneration = [NewGeneration NewChildren]; end DescendantList =[DescendantList NewGeneration]; %append new children to descendant list clear Children %done with past generation Children = NewGeneration; end