Traversals

1 / 18

Traversals - PowerPoint PPT Presentation

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. Inorder(tree t). if t = nil

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

PowerPoint Slideshow about ' Traversals' - rudolf

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
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
Inorder(tree t)
• if t = nil
• return
• inorder(t.left)
• visit(t) // e.g., print it
• inorder(t.right)

5

2

1

3

8

6

10

7

9

Inorder (Infix)

1 2 3 5 6 7 8 9 10

(a BST will always work well with in-order traversal)

5

2

1

3

8

6

10

7

9

Pre-order (Prefix)

5 2 1 3 8 6 7 10 9

5

2

1

3

8

6

10

7

9

Post-order (Postfix)

1 3 2 7 6 9 10 8 5

+

*

1

3

-

6

10

Post-order

1 3 * + 6 10 -

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

5

2

1

3

8

6

10

7

9

Depth-first search (DFS)

DFS: visit all descendents before siblings

5 2 1 3 8 6 7 10 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!

5

2

1

3

8

6

10

7

9

BFS: visit all siblings before their descendents

5 2 8 1 3 6 10 7 9

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!

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!

DFS(tree t)

Void Graph::dfs (Vertex v)

{v.visted = true;

for each w adjacent to v

if (!w.visited)

dfs(w);

}

This version for any type of trees (graph)

Graphs vs. Trees
• Graphs don’t 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 can’t (why?)
• 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

5

3

8

4

10

1

5

Not AVL Tree

3

4

1

AVL Tree

AVL Trees
• Trees often need to be “rotated” when deleting or inserting to keep AVL balance
• Nice link on this process
• Sample AVL code