Проверить идентичность деревьев

Даны два бинарных дерева, написать функцию, которая проверяет, идентичны ли они.
Два бинарных дерева идентичны, если у них одинаковая структура и на узлах в идентичных позициях храняться одинаковые значения.
Пример 1:
Дано:     1         1
          / \       / \
         2   3     2   3

        [1,2,3],   [1,2,3]

Результат: true
Пример 2:
Дано:     1         1
          /           \
         2             2

        [1,2],     [1,null,2]

Результат: false
Пример 3:
Дано:     1         1
          / \       / \
         2   1     1   2

        [1,2,1],   [1,1,2]

Результат: false
Идея решения
Дерево А идентично дереву Б, если значения в корнях совпадают, а также идентичны левые и правые поддревья, для которых мы можем опять проверить корни и левые/правые поддеревья и так далее. Очевидно, для решения нам понадобится рекурси.

Имплементация

    public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p==null && q==null) return true;
        if (p!=null && q!=null && p.val == q.val) { // значение коря поддерева
            boolean sameLeft = isSameTree(p.left, q.left); // идентичны ли поддеревья слева
            boolean sameRight = isSameTree(p.right, q.right); // идентичны ли поддеревья справа
            return sameLeft && sameRight; // возвращаем идентичность слева И справа
// если она нарушена, то вернется false, иначе вернется true
        }
        return false; // если мы до сих пор не вернули true, то деревья не идентичны
    }

Комментарии

Популярные сообщения из этого блога

Разбиение числа на сумму с максимальным произведнием слагаемых

Число подмассивов, в которых сумма элементов равна k

Сложить два числа, которые представлены списком