2013-05-04 3 views
2
List<Tree<T>> unvisited = node.getChildren(); 

ДФС:глубины первого поиска/ширина-первых, поиск легко реализация

while (!unvisited.isEmpty()) { 
    Tree<T> node = unvisited.remove(0); 
    //search node 
    unvisited.addAll(0, node.getChildren()); 
} 

BFS:

while (!unvisited.isEmpty()) { 
    Tree<T> node = unvisited.remove(0); 
    //search node 
    unvisited.addAll(node.getChildren()); 
} 

ли эти реализации слишком просто, чтобы быть правдой? Интересно, я что-то упустил?

+0

@jlordo Извините, я пропустил декларацию выше. Просто не обращай внимания! –

ответ

1

Являются ли эти реализации слишком простыми, чтобы быть правдой? Интересно, если я что-то не хватает?

Ваши реализации верны.

+0

k. спасибо! просто нужно подтверждение ... –

2

Если вы не ограничены только ациклическими графами, вы не будете иметь дублированные узлы в невидимом списке, поскольку вы не отметили посещаемые узлы. Вам необходимо выполнить итерацию над списком детей и пометить их, прежде чем добавлять их в дерево.

BFS псевдокод: http://en.wikipedia.org/wiki/Breadth-first_search#Pseudocode

Кроме того, вы можете рассмотреть возможность использования Deque вместо списка. См .: http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html

+0

Да, приведенные выше реализации были предназначены только для ациклических графиков. Тем не менее, ваш ответ выявил требуемые изменения для расширения на циклические графики. Благодаря! –

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