1 / 41

Graph Traversal

Graph Traversal. Text Weiss, § 9.6 Depth-First Search Think Stack Breadth-First Search Think Queue. Overview. Goal To systematically visit the nodes of a graph A tree is a directed, acyclic, graph (DAG) If the graph is a tree,

naoko
Download Presentation

Graph Traversal

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Graph Traversal Text • Weiss, § 9.6 Depth-First Search • Think Stack Breadth-First Search • Think Queue

  2. Overview • Goal • To systematically visit the nodes of a graph • A tree is a directed, acyclic, graph (DAG) • If the graph is a tree, • DFS is exhibited by preorder, postorder, and (for binary trees) inorder traversals • BFS is exhibited by level-order traversal

  3. Depth-First Search // recursive, preorder, depth-first search void dfs (Node v) { if (v == null) return; if (v not yet visited) visit&mark(v); // visit node before adjacent nodes for (each w adjacent to v) if (w has not yet been visited) dfs(w); } // dfs

  4. Depth-First Search // recursive, postorder, depth-first search void dfs (Node v) { if (v == null) return; tag(v); // mark v as having been considered for (each w adjacent to v) if (w has not yet been tagged) dfs(w); visit(v); // postorder traversal: visit node after // adjacent nodes } // dfs

  5. Depth-First Search // non-recursive, preorder, depth-first search void dfs (Node v) { if (v == null) return; push(v); while (stack is not empty) { pop(v); if (v has not yet been visited) mark&visit(v); for (each w adjacent to v) if (w has not yet been visited) push(w); } // while } // dfs

  6. Depth-First Search // non-recursive, postorder, depth-first search void dfs (Node v) { // Lex 20 (Do not need to submit) } // dfs

  7. Example 5 2 0 1 3 7 4 6 Policy: Visit adjacent nodes in increasing index order

  8. Preorder DFS: Start with Node 5 5 2 0 1 3 7 4 6 5 1 0 3 2 7 6 4

  9. Preorder DFS: Start with Node 5 5 5 2 0 1 3 7 4 6 Push 5

  10. Preorder DFS: Start with Node 5 5 2 0 1 3 7 4 6 Pop/Visit/Mark 5 5

  11. Preorder DFS: Start with Node 5 1 2 5 2 0 1 3 7 4 6 Push 2, Push 1 5

  12. Preorder DFS: Start with Node 5 2 5 2 0 1 3 7 4 6 Pop/Visit/Mark 1 5 1

  13. Preorder DFS: Start with Node 5 0 2 4 2 5 2 0 1 3 7 4 6 Push 4, Push 2, Push 0 5 1

  14. Preorder DFS: Start with Node 5 2 4 2 5 2 0 1 3 7 4 6 Pop/Visit/Mark 0 5 1 0

  15. Preorder DFS: Start with Node 5 3 7 2 4 2 5 2 0 1 3 7 4 6 Push 7, Push 3 5 1 0

  16. Preorder DFS: Start with Node 5 7 2 4 2 5 2 0 1 3 7 4 6 Pop/Visit/Mark 3 5 1 0 3

  17. Preorder DFS: Start with Node 5 2 7 2 4 2 5 2 0 1 3 7 4 6 Push 2 5 1 0 3

  18. Preorder DFS: Start with Node 5 7 2 4 2 5 2 0 1 3 7 4 6 Pop/Mark/Visit 2 5 1 0 3 2

  19. Preorder DFS: Start with Node 5 2 4 2 5 2 0 1 3 7 4 6 Pop/Mark/Visit 7 5 1 0 3 2 7

  20. Preorder DFS: Start with Node 5 6 2 4 2 5 2 0 1 3 7 4 6 Push 6 5 1 0 3 2 7

  21. Preorder DFS: Start with Node 5 2 4 2 5 2 0 1 3 7 4 6 Pop/Mark/Visit 6 5 1 0 3 2 7 6

  22. Preorder DFS: Start with Node 5 4 2 5 2 0 1 3 7 4 6 Pop (don’t visit) 2 5 1 0 3 2 7 6

  23. Preorder DFS: Start with Node 5 2 5 2 0 1 3 7 4 6 Pop/Mark/Visit 4 5 1 0 3 2 7 6 4

  24. Preorder DFS: Start with Node 5 5 2 0 1 3 7 4 6 Pop (don’t visit) 2 5 1 0 3 2 7 6 4

  25. Preorder DFS: Start with Node 5 5 2 0 1 3 7 4 6 Done 5 1 0 3 2 7 6 4

  26. Preorder DFS: Start with Node 5Note: edge (0,3) removed 5 2 0 1 3 7 4 6 5 1 0 7 6 2 4 3

  27. Depth-First SearchPolicy: Don’t push nodes twice // non-recursive, preorder, depth-first search void dfs (Node v) { if (v == null) return; push(v); while (stack is not empty) { pop(v); if (v has not yet been visited) mark&visit(v); for (each w adjacent to v) if (w has not yet been visited && not yet stacked) push(w); } // while } // dfs

  28. Preorder DFS (Don’t push nodes twice). Start with Node 5 5 2 0 1 3 7 4 6 5 1 0 3 7 6 4 2

  29. Postorder DFS: Start with Node 5 5 2 0 1 3 7 4 6 2 3 6 7 0 4 1 5

  30. Breadth-first Search • Ripples in a pond • Visit designated node • Then visited unvisited nodes a distance i away, where i = 1, 2, 3, etc. • For nodes the same distance away, visit nodes in systematic manner (eg. increasing index order)

  31. Breadth-First Search // non-recursive, preorder, breadth-first search void bfs (Node v) { if (v == null) return; enqueue(v); while (queue is not empty) { dequeue(v); if (v has not yet been visited) mark&visit(v); for (each w adjacent to v) if (w has not yet been visited && has not been queued) enqueue(w); } // while } // bfs

  32. BFS: Start with Node 5 5 2 0 1 3 7 4 6 5 1 2 0 4 3 7 6

  33. BFS: Start with Node 5 5 2 0 1 3 7 4 6 5

  34. BFS: Node one-away 5 2 0 1 3 7 4 6 5

  35. BFS: Visit 1 and 2 5 2 0 1 3 7 4 6 5 1 2

  36. BFS: Nodes two-away 5 2 0 1 3 7 4 6 5 1 2

  37. BFS: Visit 0 and 4 5 2 0 1 3 7 4 6 5 1 2 0 4

  38. BFS: Nodes three-away 5 2 0 1 3 7 4 6 5 1 2 0 4

  39. BFS: Visit nodes 3 and 7 5 2 0 1 3 7 4 6 5 1 2 0 4 3 7

  40. BFS: Node four-away 5 2 0 1 3 7 4 6 5 1 2 0 4 3 7

  41. BFS: Visit 6 5 2 0 1 3 7 4 6 5 1 2 0 4 3 7 6

More Related