Мне нужно написать код, который найдет все пары последовательных номеров в BST.Найти все пары последовательных номеров в BST
Например: возьмем BST T с ключом 9, T.left.key = 8, T.right.key = 19. Существует только одна пара - (8, 9).
Наивное решение, о котором я думал, состоит в том, чтобы сделать любой обход (pre, in, post) в BST и для каждого узла, чтобы найти его преемника и предшественника, и если один или два из них являются последовательными к узлу - мы их распечатаем. Но проблема в том, что он будет O (n^2), потому что у нас есть n узлов, и для каждого из них мы используем функцию, которая принимает O (h), что в худшем случае h ~ n ,
Второе решение - скопировать все элементы в массив и найти последовательные числа в массиве. Здесь мы используем O (n) дополнительное пространство, но время работы лучше - O (n).
Вы можете помочь мне найти эффективный алгоритм для этого? Я пытаюсь думать об алгоритме, который не использует дополнительное пространство, а его время работы лучше, чем O (n^2)
* Требуемый вывод - это число этих пар (нет необходимости печатать пар).
* любые 2 последовательных целых числа в BST представляют собой пару.
* BST содержит только целые числа.
Спасибо!
Определить * Найти * в "* найти все пары *" - какой требуемый результат? И что именно означает «пары пар последовательных чисел»? Любые 2 последовательных целых числа, используемые в качестве ключей? Какова действительная связь между двумя узлами? – Amit
Отредактировано. Требуемый вывод - это число этих пар (нет необходимости печатать пары). И да, любые 2 последовательных целых числа в BST. – Ran
Итак, каков вывод, если не напечатан? Непонятно, почему простого обхода порядка недостаточно (просто отслеживайте предыдущее значение и проверяйте с текущим). – Amit