Проверить идентичность деревьев
Даны два бинарных дерева, написать функцию, которая проверяет, идентичны ли они.
Два бинарных дерева идентичны, если у них одинаковая структура и на узлах в идентичных позициях храняться одинаковые значения.
Пример 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, то деревья не идентичны
}
Комментарии
Отправить комментарий