Trees Terminology (continued) Traversals February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 1
Measuring trees • The height of a node v is the length of the longest path from v to a leaf – The height of the tree is the height of the root • The depth of a node v is the length of the path from v to the root – This is also referred to as the level of a node • Note that there is a slightly different formulation of the height of a tree – Where the height of a tree is said to be the number of different levels of nodes in the tree (including the root) February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 2
Tree measurements explained A Height of tree is 3 B C Level 1 Height of node B is 2 Level 2 D E F G Depth of node E is 2 H I J Level 3 February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 3
Perfect binary trees • A binary tree is perfect , if – No node has only one child – And all the leaves have the same depth • A perfect binary tree of height h has – 2 h +1 – 1 nodes, of which 2 h are leaves • Perfect trees are also complete February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 4
Height of a perfect tree • Each level doubles the number of nodes – Level 1 has 2 nodes ( 2 1 ) – Level 2 has 4 nodes ( 2 2 ) or 2 times the number in Level 1 • Therefore a tree with ℎ levels has 2 ℎ+1 − 1 nodes – The root level has 1 node Bottom level has 2 ℎ 01 nodes, i.e. just over half of the nodes are leaves 12 11 22 24 21 23 31 32 33 34 35 36 37 38 February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 5
Complete binary trees It's not quite perfect, but almost • A binary tree is complete if – The leaves are on at most two A different levels, – The second to bottom level is B C completely filled in and – The leaves on the bottom level are as far to the left as possible D E F February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 6
Binary tree traversal It's recursive! • A traversal algorithm for a binary tree visits each node in the tree – Typically, it will do something while visiting each node! • Traversal algorithms are naturally recursive • There are three traversal methods – inOrder – preOrder – postOrder February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 7
inOrder traversal algorithm void inOrder(Node* nd) { if (nd != nullptr) { inOrder(nd->leftchild); visit(nd); inOrder(nd->rightchild); } } The visit function would do whatever the purpose of the traversal is (e.g. print the data value of the node). February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 8
preOrder traversal visit(nd); preOrder(nd->leftchild); 1 preOrder(nd->rightchild); 17 2 6 visit visit 13 27 preOrder(left) preOrder(left) preOrder(right) preOrder(right) 8 5 7 3 visit visit visit 16 20 39 9 preOrder(left) preOrder(left) preOrder(left) preOrder(right) preOrder(right) preOrder(right) visit preOrder(left) 4 preOrder(right) 11 visit preOrder(left) preOrder(right) February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 9
postOrder traversal postOrder(nd->leftchild); postOrder(nd->rightchild); 8 visit(nd); 17 4 7 postOrder(left) postOrder(left) postOrder(right) 13 27 postOrder(right) visit visit 6 3 5 2 postOrder(left) postOrder(left) postOrder(left) 16 20 postOrder(right) 39 postOrder(right) 9 postOrder(right) visit visit visit postOrder(left) postOrder(right) 1 visit postOrder(left) 11 postOrder(right) visit February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 10
Exercise • What will be printed by an in-order traversal of the tree? – preOrder? postOrder? inOrder(nd->leftchild); 17 visit(nd); inOrder(nd->rightchild); 9 27 6 16 20 31 12 39 Note to Geoff: show the trick with the dots! February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 11
Not quite recursive Another type of tree traversal • We have seen pre-order, in-order, post-order traversals • What about a traversal that visits every node in a level before working on the next level? – level-order traversal 41 33 87 21 74 36 45 78 25 Use some ADT to support this? February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 12
What is "visiting"? • Some operation to be done at the current node – counting, or arithmetic – creating a node (e.g. for a copy constructor) – deleting a node (e.g. for a destructor) What is the height of • e.g. height this tree? What is the height of What is the this tree? height of this tree? int Height(Node* nd) { if (nd == nullptr) // empty tree return _____; else return _______________________; } Which type of traversal is this? Running time? February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 13
Readings for this lesson • Carrano & Henry: – Chapter 15.1 – 15.2 (Trees, tree traversals) • Next class: – Carrano & Henry: Chapter 15.2, 16.1 – 16.2 (Tree traversals, implementations) February 10, 2020 Cinda Heeren / Andy Roth / Geoffrey Tien 14
Recommend
More recommend