int HaploTree::Traverse(IntArray & pointer, IntArray & state) const { while (pointer.Length()) { int branch = pointer.Peek(); int & allele = state[levels[branch]]; int next = -1; while (++allele < alleleCounts[levels[branch]]) if ((next = PeekBranch(branch, allele)) != -1) break; if (next == -1) { allele = -1; pointer.Pop(); continue; } if (levels[branch] == depth - 1) return next; pointer.Push(next); } return -1; }