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 встречаются.

lock icon+16 скрытых тестов при отправке

challenge icon

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

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

Сбросить код
def isSymmetric(tree):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

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

Ожидается

true