Реализация функции подсчёта листовых узлов в бинарном поисковом дереве

Верните 0 для пустого дерева и 1 для узла без детей. Для остальных узлов результат равен сумме количества листьев слева и справа; значение ключа не влияет на подсчёт.

Короткий ответ

Что ответить на собеседовании

Верните 0 для пустого дерева и 1 для узла без детей. Для остальных узлов результат равен сумме количества листьев слева и справа; значение ключа не влияет на подсчёт.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать функцию, которая определяет количество листьев в бинарном дереве поиска. Функция получает в качестве аргумента указатель на корневой элемент (root) BST и возвращает количество листовых узлов.

Ответ

Верните 0 для пустого дерева и 1 для узла без детей. Для остальных узлов результат равен сумме количества листьев слева и справа; значение ключа не влияет на подсчёт.

std::size_t countLeaves(const Node* root) {
    if (!root) return 0;
    if (!root->left && !root->right) return 1;
    return countLeaves(root->left) + countLeaves(root->right);
}

Узел с одним потомком не считается листом. Алгоритм подходит не только для BST, но и для любого ациклического бинарного дерева. Время O(n), стек O(h); на глубокой цепочке безопаснее использовать явный стек.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее