2016-05-23 3 views
0

Во время собеседования меня спрашивали, какой был рекомендуемый тип дерева, если вы собираетесь реализовать поиск по ширине.Рекомендуемый тип дерева для поиска по ширине

Я не мог видеть конкретного преимущества для чего-либо вроде красно-черного/радиуса/попыток.

Какой лучший вид использовать?

+0

«Лучший», каким образом? Представление [left-child right-sibling] (https://en.wikipedia.org/wiki/Left-child_right-sibling_binary_tree) довольно удобно для поиска по ширине общего дерева. Он спрашивал конкретно о бинарных деревьях или деревьях вообще? –

+0

На самом деле он не был бы нарисован на нем ... основанный на команде/продукте, я бы заподозрил, что это то, что они уже реализовали, и он хотел посмотреть, не приземлюсь ли я на то же самое - что тяжело, часть всей дискуссии! Многообразное дерево кажется применимым к проблеме, которую он описал (сохраняя числа, стоящие вдоль одного измерения, затем другое, затем другое и т. Д.). – Oli

+0

Однако, прочитав вашу ссылку, я не понимаю, почему она лучшая - вы имеете в виду просто для простоты внедрения, потому что вы просто следуете за одной стороной, чтобы получить первый уровень? – Oli

ответ

0

Я бы сразу задал два вопроса.

  1. Почему вы делаете первый поиск в первый раз?
  2. Что еще вы делаете с деревом в одно и то же время?

В общем, причина для поиска по ширине заключается в том, что вы хотите получить ответ, близкий к корню. Ваше дерево должно быть сформировано таким образом, чтобы «близко к корню» соответствовало вашим критериям для поиска. И тогда вам нужно дерево, форма которого соответствует этим критериям. Это, как правило, очень отличается от того, чтобы оптимизировать форму, чтобы минимизировать расстояние от корня до любого листа (например, красно-черные деревья).

И забота о том, что еще вы делаете, заключается в том, что если это общая структура данных, вы блокируете все это. Поэтому тщательно продумайте, какие блокировки и утверждения у вас будут, и как вы справитесь с этим.

Смежные вопросы