Проверка идентичности двух бинарных деревьев

Сравнивайте соответствующие узлы: два пустых дерева равны, только одно пустое — нет. Для непустых узлов должны совпасть значение, левое и правое поддеревья.

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

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

Сравнивайте соответствующие узлы: два пустых дерева равны, только одно пустое — нет. Для непустых узлов должны совпасть значение, левое и правое поддеревья.

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

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

Условие

Необходимо реализовать функцию isSameTree, которая определяет, одинаковы ли два бинарных дерева. Два дерева считаются одинаковыми, если их структуры совпадают и все соответствующие узлы содержат одинаковые значения.

class ForInterview {
public:
    struct TreeNode {
        int val;
        TreeNode* left;
        TreeNode* right;

        TreeNode() : val(0), left(nullptr), right(nullptr) {}
        TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
        TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
    };

    bool isSameTree(TreeNode* p, TreeNode* q) {
        // реализовать
    }
};

Ответ

Сравнивайте соответствующие узлы: два пустых дерева равны, только одно пустое — нет. Для непустых узлов должны совпасть значение, левое и правое поддеревья.

Вставьте в класс следующую реализацию:

bool isSameTree(TreeNode* p, TreeNode* q) {
    if (!p || !q) return p == q;
    return p->val == q->val
        && isSameTree(p->left, q->left)
        && isSameTree(p->right, q->right);
}

Проверка структуры обязательна: одинакового набора значений недостаточно. В худшем случае время O(n), дополнительная память O(h) для стека, где h — высота дерева. Для очень глубоких деревьев лучше явный стек пар узлов.

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

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

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

Подробнее