1 / 26

CSE 326 Trees

CSE 326 Trees. David Kaplan Dept of Computer Science & Engineering Autumn 2001. Trees. Family Trees Organization Charts Classification trees what kind of flower is this? is this mushroom poisonous? File directory structure Parse trees (x + y * z) Search trees

Télécharger la présentation

CSE 326 Trees

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. CSE 326Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001

  2. Trees • Family Trees • Organization Charts • Classification trees • what kind of flower is this? • is this mushroom poisonous? • File directory structure • Parse trees (x + y * z) • Search trees • Non-recursive procedure call chains Non-recursive? (I thought a tree was a recursive structure …) CSE 326 Autumn 2001 2

  3. Definition of a Tree Recursive definition: • empty tree has no root • given trees T1,…,Tk and a node r, there is a tree T where • r is the root of T • the children of r are the roots of T1, …, Tk r T1 T2 T3 CSE 326 Autumn 2001 3

  4. Tree Terminology A root: leaf: child: parent: sibling: ancestor: descendent: subtree: B C D E F G H I J K L M N CSE 326 Autumn 2001 4

  5. More Tree Terminology A depth: height: degree: branching factor: B C D E F G H I J K L M N CSE 326 Autumn 2001 5

  6. YMTT (Yet More Tree Terminology) binary: n-ary: complete: A B C D E F G H I J CSE 326 Autumn 2001 6

  7. r Tree Calculations Example:Longest Undirected Path Find longest undirected path • ignore direction • don’t repeat nodes Observations Longest undirected path is either: • longest path within a subtree • longest path through root If path goes through root, its length is: height(tallest subtree) + height(next-tallest subtree) + 2 Why? CSE 326 Autumn 2001 7

  8. Algorithm Start at root Recursively calculate {LUD path length, height} for each subtree A B C D E F G H I J K L L M N Tree Calculations Example:Longest Undirected Path {?,?} {2,1} {?,?} {?,?} {?,?} {2,2} CSE 326 Autumn 2001 8

  9. a e b c d h i j f g k l Logical View of Tree CSE 326 Autumn 2001 9

  10. Basic Tree Data Structure:First child/next sibling data next_sibling first_child a b c d e  CSE 326 Autumn 2001 10

  11. a c d e h i j f g k l Actual Data Structure b CSE 326 Autumn 2001 11

  12. Combined View of Tree a e b c d h i j f g k l CSE 326 Autumn 2001 12

  13. Tree Traversals • Many algorithms involve walking through a tree, and performing some computation at each node • Walking through a tree is called a traversal • Common kinds of traversal • Pre-order: node, then children • Post-order: children, then node • Level-order: nodes at depth d, nodes at depth d+1, … • In-order: left, then node, then right (specific to binary trees) CSE 326 Autumn 2001 13

  14. Pre-Order Traversal Perform computation at the node, then recursively perform computation on each child preorder(node * n) { node * c; if (n != NULL) { DO SOMETHING; c = n->first_child; while (c != NULL) { preorder(c); c = c->next_sibling; } } } CSE 326 Autumn 2001 14

  15. a e b c d h i j f g k l Pre-Order Traversal Example CSE 326 Autumn 2001 15

  16. Pre-Order Applications • Use when computation at node depends upon values calculated higher in the tree (closer to root) • Example: computing depth depth(node) = 1 + depth( parent of node ) • Example: printing out a directory structure CSE 326 Autumn 2001 16

  17. Pre-Order Example:Computing Depth of All Nodes Depth(node * n, int d) { node * c; if (n != NULL) { n->depth = d; c = n->first_child; while (c != NULL) { Depth(c, d+1); c = c->next_sibling; } } } • Add a field depth to all nodes • Call Depth(root,0) to set depth field CSE 326 Autumn 2001 17

  18. Post-Order Traversal postorder(node * n) { node * c; if (n != NULL) { c = n->first_child; while (c != NULL) { postorder(c); c = c->next_sibling; } DO SOMETHING; } Recursively perform computation on each child, then perform computation at node CSE 326 Autumn 2001 18

  19. Post-Order Applications • Use when computation at node depends on values calculated lower in tree (closer to leaves) • Example: computing height height(node) = 1 + MAX( height(child1), … height(childk) ) • Example: size of tree rooted at node size(node) = 1 + size(child1) + … + size(childk) CSE 326 Autumn 2001 19

  20. Post-Order Example:Computing Size of Tree int Size(node * n) { node * c; if (n == NULL) return 0; else { int m = 1; c = n->first_child; while (c != NULL) { m += Size(c); c = c->next_sibling; } } return m; } • Call Size(root) to compute number of nodes in tree CSE 326 Autumn 2001 20

  21. Depth-First Search • Pre-Order and Post-Order traversals are examples of depth-first search: • Nodes are visited deeply on left-most branches before any nodes are visited on right-most branches • NOTE: visiting right deeply before left would still be depth-first - crucial idea is “go deep first” • In DFS the nodes “being worked on” are kept on a stack (where?) CSE 326 Autumn 2001 21

  22. a e b c d h i j f g k l Level-Order (Breadth-First) Traversal • Consider task of traversing tree level-by-level fromtop to bottom (alphabetic order, in example below) • Which data structure can best keep track of nodes? CSE 326 Autumn 2001 22

  23. Level-Order (Breadth-First) Algorithm Put root in a Queue Repeat until Queue is empty: • Dequeue a node • Process it • Add its children to queue CSE 326 Autumn 2001 23

  24. Level-Order Example:Printing the Tree print(node * root) { node * n, c; queue Q; Q.enqueue(root); while (! Q.empty()) { n = Q.dequeue(); print n->data; c = n->first_child; while (c != NULL) { Q.enqueue(c); c = c->next_sibling; } } } • Call Print(root) to print tree contents CSE 326 Autumn 2001 24

  25. a e b c d h i j f g k l Example:Level-Order Queue CSE 326 Autumn 2001 25

  26. Applications of Breadth-First Search • Find shortest path from root to a given node N • if N is at depth k, BFS will never visit a node at depth>k • important for really deep trees • Generalizes to finding shortest paths in graphs • Spidering the world wide web • From a root URL, fetch pages that are farther and farther away CSE 326 Autumn 2001 26

More Related