Traversals - PowerPoint PPT Presentation

1 / 18
About This Presentation
Title:

Traversals

Description:

Traversals. A systematic method to visit all nodes in a ... BFS: visit all siblings before their descendents. 5. 2. 1. 3. 8. 6. 10. 7. 9. 5 2 8 1 3 6 10 7 9 ... – PowerPoint PPT presentation

Number of Views:38
Avg rating:3.0/5.0
Slides: 19
Provided by: galk
Category:

less

Transcript and Presenter's Notes

Title: Traversals


1
Traversals
  • A systematic method to visit all nodes in a tree
  • Binary tree traversals
  • Pre-order root, left, right
  • In-order left, root, right
  • Post-order left, right, root
  • General graph traversals (searches)
  • Depth-first search
  • Breadth-first search

2
Inorder(tree t)
  • if t nil
  • return
  • inorder(t.left)
  • visit(t) // e.g., print it
  • inorder(t.right)

3
Inorder (Infix)
  • 1 2 3 5 6 7 8 9 10
  • (a BST will always work well with in-order
    traversal)

4
Pre-order (Prefix)
  • 5 2 1 3 8 6 7 10 9

5
Post-order (Postfix)
  • 1 3 2 7 6 9 10 8 5

6
Post-order
  • 1 3 6 10 -

7
Depth-first search (DFS)????? ?????))
  • DFS Search one subtree completely before other
  • Pre-order traversal is an example of a DFS
  • Visit root, left subtree (all the way), visit
    right subtree
  • We can do it in other order
  • Visit root, right subtree, left subtree

8
Depth-first search (DFS)
  • DFS visit all descendents before siblings

5 2 1 3 8 6 7 10 9
9
DFS(tree t)
  • q ? new stack
  • push(q, t)
  • while (not empty(q))
  • curr ? pop(q)
  • visit curr // e.g., print curr.datum
  • push(q, curr.left)
  • push(q, curr.right)
  • This version for binary trees only!

10
Breadth-first search (BFS)(????? ?????)
  • BFS visit all siblings before their descendents

5 2 8 1 3 6 10 7 9
11
BFS(tree t)
  • q ? new queue
  • enqueue(q, t)
  • while (not empty(q))
  • curr ? dequeue(q)
  • visit curr // e.g., print curr.datum
  • enqueue(q, curr.left)
  • enqueue(q, curr.right)
  • This version for binary trees only!

12
DFS(tree t)
  • q ? new stack
  • push(q, t)
  • while (not empty(q))
  • curr ? pop(q)
  • visit curr // e.g., print curr.datum
  • push(q, curr.left)
  • push(q, curr.right)
  • This version for binary trees only!

13
DFS(tree t)
  • Void Graphdfs (Vertex v)
  • v.visted true
  • for each w adjacent to v
  • if (!w.visited)
  • dfs(w)
  • This version for any type of trees (graph)

14
Graphs vs. Trees
  • Graphs dont have any root
  • Graphs can be directed or undirected
  • Trees only grow down (upside-down)
  • (Why do trees grow upside down for Computer
    scientists???)
  • Graphs can have cycles, trees cant (why?)

15
DFS Example on Graph
sourcevertex
16
AVL (Adelson, Velskii, Landis)
  • Balance the tree (not our targil)
  • The left and right branches of the tree can only
  • differ by one level
  • Ensures log N depth (much better for searching)
  • Takes log N to add or delete

17
5
Not AVL Tree
3
4
1
AVL Tree
18
AVL Trees
  • Trees often need to be rotated when deleting or
    inserting to keep AVL balance
  • Nice link on this process
  • Sample AVL code
Write a Comment
User Comments (0)
About PowerShow.com