Допустим, вы получили следующую структуру:
Format: Node [Children]
A [B C D]
B [E F]
C [G]
D []
E []
F []
G []
Сначала поиск в ширину посещает всех детей узла, а затем посещает их. Вот псевдокод и решение для вышеуказанной структуры:
1. Enqueue root node.
2. Dequeue and output. If the queue is empty, go to step 5.
3. Enqueue the dequeued node's children.
4. Go to Step 2.
5. Done
Two queues: (Active Node) [Output] [Working Set]
Starting with root:
( ) [] [A]
(A) [A] [B C D]
(B) [A B] [C D E F]
(C) [A B C] [D E F G]
(D) [A B C D] [E F G]
(E) [A B C D E] [F G]
(F) [A B C D E F] [G]
(G) [A B C D E F G] []
Done
Сначала поиск по глубине сначала посещает самый низкий уровень (самые глубокие дочерние элементы) дерева. Существует два типа глубинного поиска: предварительный заказ и пост-заказ. Это просто различие между тем, когда вы добавляете узел к выводу (когда вы посещаете его, а не покидаете его).
var rootNode = structure.getRoot();
var preOrder = new Array();
var postOrder = new Array();
function DepthFirst( rootNode ){
// Pre-order
preOrder[ preOrder.length ] = rootNode;
for( var child in rootNode ){
DepthFirst( child );
}
// Post-order
postOrder[ postOrder.length ] = rootNode;
}
Pre-order:
* A B E F C G D
Post-order:
* E F B G C D A