Сложность: easy
Дан корень бинарного дерева. Проверьте, является ли это дерево зеркальным отражением самого себя (то есть симметричным относительно своего центра).
Пример:
Input: root = [1,2,2,3,4,4,3]
Output: true
👨💻 Алгоритм:
1⃣Дерево симметрично, если левое поддерево является зеркальным отражением правого поддерева.
2⃣Следовательно, вопрос заключается в том, когда два дерева являются зеркальным отражением друг друга?
Два дерева являются зеркальным отражением друг друга, если:
- Их корни имеют одинаковое значение.
- Правое поддерево каждого дерева является зеркальным отражением левого поддерева другого дерева.
3⃣Это похоже на человека, смотрящего в зеркало. Отражение в зеркале имеет ту же голову, но правая рука отражения соответствует левой руке настоящего человека и наоборот.
Вышеописанное объяснение естественным образом превращается в рекурсивную функцию.
😎 Решение:
public class Solution {
public bool IsSymmetric(TreeNode root) {
return IsMirror(root, root);
}
public bool IsMirror(TreeNode t1, TreeNode t2) {
if (t1 == null && t2 == null)
return true;
if (t1 == null || t2 == null)
return false;
return (t1.val == t2.val) && IsMirror(t1.right, t2.left) &&
IsMirror(t1.left, t2.right);
}
}Ставь 👍 и забирай 📚 Базу знаний
