Took me quite a while to complete this challenge. I wanted to find a dynamic solution for any number of levels, and struggled to do it for more than 3 levels without an iterative macro. At the end I went for an iterative macro, which was a variation of a macro I did in challenge #12.
I also checked other's non-iterative solutions with an altered input of up to 8 level of BoM and solutions by @patrick_digan and @EstherB47 handled that properly. Impressive! Definitely going to study them closely!
Here's my attempted solution. Interesting to see the different ways to pass in either the starting element or all data and then either filter within the iterative macro or filter beforehand. For some reason it makes more sense in my head to filter outside of the macro and have the data also in the macro. Maybe bad design (less dynamic), but it works in my head better for now!