«Зная root бинарного дерева, мы проверим, является ли бинарное дерево зеркалом самого себя (т. е. симметрично ли относительно своего центра)».

-LeetCode

Пример 1:

Двоичное дерево также представлено корнем в виде массива.

корень = [1,2,2,3,4,4,3]

Для этого примера бинарное дерево является симметричным зеркальным отображением. Таким образом, он будет иметь выход true.

Пример 2:

Во втором примере у нас есть бинарное дерево, не симметричное относительно центра.

корень = [1,2,2,ноль,3,нуль,3]

Вывод false.

Подход:

Мы начинаем с функции isSymmetric, мы должны вернуть то, что мы узнаем, является ли дерево зеркальным отражением. Итак, мы создаем функцию isMirror, которая принимает параметры двух корней, потому что в бинарном дереве мы должны смотреть на два поддерева (левое и правое), ответвляющиеся от родительского узла. Мы будем называть поддеревья как дерево1 и дерево2. Мы передаем tree1 и tree2 в качестве наших параметров. В нашем первом операторе if мы начнем с базового случая, если дерево1 и дерево2 равны нулю, тогда мы вернем истину. Второй оператор if будет состоять в том, что если дерево1 илидерево2 равны нулю, то мы можем определить, что обе стороны несимметричны. Наконец, мы вернем tree1 и tree2, и определение левого и правого корней поддеревьев стало возможным из определения узла бинарного дерева. Мы возвращаем tree1.right и tree2.left и tree1.left и tree2.right, вызывая функцию isMirror и передавая эти два параметра соответственно. Это потому, что когда мы определяем, являются ли деревья зеркальным отражением, мы должны сравнивать сторону дерева с противоположной стороной другого дерева. После того, как мы завершим нашу функцию isMirror, мы должны убедиться, что мы вызываем функцию isMirror внутри функции isSmetric и возвращаем ответ из этой функции.

Узел дерева

function TreeNode(val, left, right) {
this.val = (val===undefined ? 0 : val)
this.left = (left===undefined ? null : left)
this.right = (right===undefined ? null : right)
}

Ответ:

var isSymmetric = function(root) {
return isMirror(root, root)
};

const isMirror = (tree1, tree2) =› {
if(tree1 == null && tree2 == null){
return true
}
if(tree1 == null | | tree2 == null){
return false
}
return (tree1 && tree2) && isMirror(tree1.right, tree2.left) && isMirror(tree1.left, tree2.right)
}