There goes the bloodline ☹️
In the following examples get_n_children()
returns the number of children the actor has and get_children()
returns the children as an array.
Method 1: Standard recursion
function get_childless_descendants(actor) {
const leafs = []
recurse(actor)
return leafs
function recurse(actor) {
if (actor.get_n_children()) {
actor.get_children().forEach(recurse)
return
}
leafs.push(actor)
}
}
Method 2: Functional using a recursive reducer
function get_childless_descendants_using_reduce(actor) {
const leafs = (acc, cur) => cur.get_n_children()
? cur.get_children().reduce(leafs, acc)
: [...acc, cur]
return leafs([], actor)
}
Method 3: Functional using a recursive flatMap
function get_childless_descendants_using_flatMap(actor) {
const leafs = (actor) => actor.get_n_children()
? actor.get_children().flatMap(leafs)
: [ actor ]
return leafs(actor)
}
TODO: What happens when the tree is large? Recursion is expensive - an iterator/generator version could be used to find the leaf nodes one at a time, on demand.
Do you have another method?
Top comments (0)