Вы можете подумать, что это O (2 n ) из-за двух рекурсивных дочерних вызовов, но все алгоритмы обхода дерева, подобные этому, имеют O (n). Каждый узел дерева посещается только один раз; если вы добавите к дереву 10 узлов, вы получите еще 10 кадров стека, порожденных алгоритмом, что является линейной зависимостью. Да, фрейм имеет предварительные, промежуточные и постэтапные этапы для дочерних посещений, поэтому управление действительно возвращается обратно во фрейм несколько раз, но это нормальное линейное поведение, и нет никакого способа улучшить сложность при посещении каждого узла в дерево.