Menu
CoddyTech

Subtree of Another Tree

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

Верните true, если у какого-либо узла root всё его поддерево имеет в точности такую же структуру и значения, как subRoot, и false в противном случае. Всё дерево root тоже считается.

Функция

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
дерево для поиска, в порядке уровней, где -1 обозначает пустое место
subRootinteger-array
дерево, которое нужно искать, в том же формате
Возвращаетboolean
истинно, если subRoot присутствует в root в качестве узла со всеми его потомками, иначе ложно

Ограничения

  • 1 ≤ root.length ≤ 32767 и 1 ≤ subRoot.length ≤ 32767
  • Каждая запись — это -1 или значение от 0 до 104.
  • root[0] и subRoot[0] никогда не равны -1, поэтому в обоих деревьях есть хотя бы один узел.
  • Любой из массивов может заканчиваться дополнительными элементами -1 после последнего узла.
  • Оба потомка пустого места тоже пусты, а глубина каждого дерева не превышает 14.
  • Значения могут повторяться.

Примеры

Ввод
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
Вывод
true
Пояснение
У узла 2 с индексом 1 есть дочерние узлы 1 и 3, и оба являются листьями. Это в точности subRoot.
challenge icon

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

Можешь ли ты определить отпечаток каждого поддерева по его значению и отпечаткам его дочерних узлов, чтобы сравнение с subRoot стоило O(1)? Что делать, если отпечатки двух разных поддеревьев совпали?

Сбросить код
def isSubtree(root, subRoot):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргументы

root = [6, 2, 8, 1, 3, -1, 9]
subRoot = [2, 1, 3]

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

true