Мне кажется, что предварительный обход и DFS такие же, как и в тех случаях, когда мы проходим до листа node глубже. Может ли кто-нибудь исправить меня, если я ошибаюсь?
Спасибо заранее!
Мне кажется, что предварительный обход и DFS такие же, как и в тех случаях, когда мы проходим до листа node глубже. Может ли кто-нибудь исправить меня, если я ошибаюсь?
Спасибо заранее!
Предварительный заказ - это один тип DFS.
Существует три типа обхода глубины: предварительный заказ, порядок и пост-порядок.
Обратитесь здесь для получения дополнительной информации.
Это, вероятно, зависит от определения и реализации глубины
алгоритм. DefaultMutableTreeNode
класс Java Swing JTree
Компонент имеет следующие методы перечисления, используемые для обхода дерева:
В реализации Java Swing depthFirstEnumeration
является тем же
как postOrderEnumeration
. Мои тесты и официальная документация
подтверждает это.
Другие могут по-разному определять, что означает глубина. Например, статья в Википедии говорится, что предзаказ и обход после заказа являются конкретными типами прохождения в глубину. Это будет означать, что глубинный обход не конкретный алгоритм обхода.
Это не будет. Предзаказ имеет строгий способ посещения левого node, а затем правого node. Но для DFS это может быть либо, как нет строгой моды. Таким образом, существует более одного обхода, основанного на том, что вы нажимаете на стек.
Интуитивно, они чувствуют то же самое из-за того, как мы применяем алгоритм DFS с использованием рекурсии (то есть используя неявную структуру данных стека) в большинстве реализаций. В большинстве случаев (или во всех) результаты такие же, как и при обходе предварительного заказа.
Идея DFS - выбрать ветку и углубиться в эту, полностью ее изучить. Принимая во внимание, что способ выбора ветки и ее отключения определяется тем, какой тип DFS вы реализуете. Просто ради завершения, в алгоритме BFS мы проходим по уровням.
Помните, предварительный заказ - это просто тип DFS. У нас также есть другие методы, которые показаны ниже.
Источник изображения: Базовая CS