Menu
CoddyTech

Symmetric Tree

Дано бинарное дерево, хранящееся в массиве tree в порядке уровней. Корень находится по индексу 0, потомки узла с индексом i находятся по индексам 2*i+1 (левый) и 2*i+2 (правый), -1 обозначает пустое место, а в конце массива могут быть дополнительные элементы -1. Верните true, если дерево является зеркальным отражением самого себя относительно вертикальной линии, проходящей через корень, и false в противном случае. Должны совпадать и форма, и значения.

Функция

isSymmetric(tree: integer-array) → boolean
treeinteger-array
двоичное дерево в порядке уровней, где -1 обозначает пустое место
Возвращаетboolean
true, если дерево зеркально симметрично, иначе false

Ограничения

  • 1 ≤ tree.length ≤ 32767
  • Каждый tree[i] равен -1 или значению, для которого 0 ≤ tree[i] ≤ 1000.
  • tree[0] никогда не равно -1, поэтому в дереве есть как минимум один узел.
  • Массив может заканчиваться дополнительными элементами -1 после последнего узла.
  • Оба потомка пустого места тоже пусты, а глубина не превышает 14.

Примеры

Ввод
tree = [1, 2, 2, 3, 4, 4, 3]
Вывод
true
Пояснение
Сложите дерево пополам. Две 2 с индексами 1 и 2 встречаются, внешние 3 с индексами 3 и 6 встречаются, а внутренние 4 на позициях 4 и 5 встречаются.
challenge icon

Дополнительный вопрос

Если форма дерева симметрична, но некоторые значения отличаются, какое минимальное число значений узлов нужно изменить, чтобы дерево стало симметричным?

Сбросить код
def isSymmetric(tree):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргумент

tree = [1, 2, 2, 3, 4, 4, 3]

Ожидаемый вывод

true