public int [] GetElementIndexArrayCulmativeFull() { int [] elements = new int [CulmativeFullSize]; int element_index = 0; // Depth first for low memory Stack <Tuple <MaxTreeNode <ElementType>, int> > node_stack = new Stack <Tuple <MaxTreeNode <ElementType>, int> >(); node_stack.Push(new Tuple <MaxTreeNode <ElementType>, int>(this, 0)); while (node_stack.Count != 0) { Tuple <MaxTreeNode <ElementType>, int> node_index_pair = node_stack.Pop(); MaxTreeNode <ElementType> node = node_index_pair.Item1; int node_index = node_index_pair.Item2; if (node_index < node.children.Count) { node_stack.Push(new Tuple <MaxTreeNode <ElementType>, int>(node, node_index + 1)); node_stack.Push(new Tuple <MaxTreeNode <ElementType>, int>(node.children[node_index], 0)); } else { node.GetElementIndexArrayCulmativeRealRBA(elements, element_index); element_index = element_index + node.NodeElementIndexes.Count; } } return(elements); }