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