this boils down to the two alternatives - manipulate the target data structure - build an altered copy since our goal is to handle large tree structures efficiently, the decision was cast in favour of data manipulation