flattenHierarchy function
Flattens tree: nodes has (id, parentId). Returns list of (id, level). Root level = 0.
Assumes an acyclic parent graph: a cycle among nodes causes unbounded
recursion. Recursion depth equals the tree height.
Implementation
List<(String, int)> flattenHierarchy(List<HierarchyUtils> nodes) {
final Map<String, String?> parent = {for (final n in nodes) n.id: n.parentId};
final List<(String, int)> out = <(String, int)>[];
void visit(String id, int level) {
out.add((id, level));
for (final MapEntry<String, String?> e in parent.entries) {
if (e.value == id) visit(e.key, level + 1);
}
}
for (final root in nodes) {
if ((root.parentId ?? '').isEmpty) visit(root.id, 0);
}
return out;
}