WedX - журнал о программировании и компьютерных науках

Получение нескольких предыдущих узлов в двоичном дереве поиска

Я реализовал бинарное дерево поиска на Java, которое может искать определенный узел. После того, как я найду определенный узел, я также хотел бы получить определенное количество узлов (скажем, 5), которые упорядочены до того, как узел был найден. Единственный способ, который я могу придумать, чтобы добиться этого: пройтись по всему дереву, добавить каждый узел в список массивов (или другую плоскую структуру данных), а затем найти узел в списке массивов и получить пять предыдущих узлов.

Но это неэффективно и неэлегантно. Есть ли способ сделать это, просто пройдя по дереву назад?


  • Конечно, последние посещенные — это просто родители рассматриваемого узла? 24.05.2014
  • @OliCharlesworth Не обязательно. 24.05.2014
  • @RikayanBandyopadhyay: Если нет, то что именно OP означает последнее посещение? 24.05.2014
  • Ой, извините, я должен уточнить, я имел в виду несколько узлов, которые находятся перед найденным узлом, по порядку. Например, если бы я хотел найти 6 в дереве с номерами от 1 до 10, предыдущие 3 узла были бы 3,4,5. 24.05.2014
  • @OliCharlesworth Должны ли последние 5 посещенных узлов всегда быть родителями текущего узла в bst ?! 24.05.2014
  • @Mal: я не понимаю этот пример. Почему вы обязательно посетили 3,4,5, чтобы добраться до 6? Можете ли вы добавить немного ASCII-арта (или что-то еще) к своему вопросу, чтобы проиллюстрировать то, что вы спрашиваете? 24.05.2014
  • @Mal Я не думаю, что хранение последних 5 узлов неэффективно в каком-либо смысле. Добавление/удаление из этого списка может быть выполнено за время O(1). И пространство также остается постоянным. Какова ваша цель? Можете ли вы уточнить это? 24.05.2014
  • Хм, хорошо, не обязательно посещаемые, просто узлы, которые лексикографически находятся перед узлом, найденным в дереве. 24.05.2014
  • @Mal: О, это совсем другая проблема! Вы должны переписать свой вопрос соответственно... 24.05.2014
  • Похоже, вам нужно бинарное дерево с нитями. 24.05.2014
  • Я думаю, что найти предшественника немного сложнее, но похоже, что бинарное дерево с нитями решит проблему! Спасибо @OliCharlesworth: D 24.05.2014
  • Поиск предшественника идентичен поиску преемника, вы просто заменяете каждое вхождение левого на правое и наоборот в алгоритме. 24.05.2014
  • Теперь понятно, спасибо @Dukeling! Я предполагаю, что моя проблема была больше связана с знанием того, что я на самом деле хочу сделать, и что искать, чтобы решить проблему. 25.05.2014

Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]