Когда ставится задача использования иерархических структур на проекте в большинстве случаев разработчики выбирают тот алгоритм, который они используют постоянно, буть то собственный велосипед или какой-либо из основных алгоритмов. По моему убеждению это не совсем верно, разработчик должен и обязан знать все основные алгоритмы и выбирать тот, который более всего подходит для решения поставленой задачи. Каждый из алгоритмов имеет свои плюсы и свои минусы, отсюда правило первое:
Именно так. Да, любым решением можно выполнить любые задачи, но вопрос в том, какие затраты при этом будут.