Стандартный алгоритм для удаления всех узлов в двоичном дереве использует по узлам в этих строках:
if (root is not null) {
recursively delete left subtree
recursively delete right subtree
delete root
}
В этом алгоритме используется вспомогательное пространство хранения O (h), где h - высота дерева, из-за пространства, необходимого для хранения кадров стека во время рекурсивных вызовов. Однако он работает во времени O (n), потому что каждый node посещается ровно один раз.
Есть ли алгоритм для удаления всех узлов в двоичном дереве, используя только O (1) вспомогательное пространство для хранения, не жертвуя временем выполнения?