Я смотрю книгу интервью и вопрос:
У вас есть два очень больших двоичных дерева:
T1
с миллионами узлов иT2
с сотнями узлов. Создайте алгоритм, чтобы решить, является лиT2
поддеревомT1
.
Авторы упоминают это как возможное решение:
Обратите внимание, что проблема здесь указывает, что
T1
имеет миллионы узлов - это означает, что мы должны быть осторожны с тем, сколько места мы используем. Скажем, например,T1
имеет 10 миллионов узлов - это означает, что одних данных составляет около40 mb
. Мы могли бы создать строку, представляющую обходы по порядку и по предварительному заказу. Если предварительный обходT2
является подстрокой предварительного обходаT1
, а неупорядоченный обходT2
является подстрокой обходаT1
, тогдаT2
является подстрокойT1
.
Я не совсем уверен, почему, если это правда:
T2-preorder-traversal-string
является подстрокойT1-preorder-traversal-string
T2-inorder-traversal-string
является подстрокойT1-inorder-traversal-string
Это T2
должно быть подстрокой (хотя я предполагаю, что автор имеет в виду поддерево) T1
. Могу я получить объяснение этой логике?
EDIT: пользователь BartoszMarcinkowski поднимает хороший вопрос. Предположим, что у обоих деревьев нет повторяющихся узлов.