Dr. Lei Huang lhuang@pvamu.edu Office: SR Collins 314
Acknowledgement: These slides are adapted from slides provided with Data Structures and Algorithms in C++, Goodrich, Tamassia and Mount (Wiley 2004) and Dr. Nancy Amato from TAMU
Trees Outline and Reading Tree ADT (6.1) Preorder and postorder traversals (6.2.3) BinaryTree ADT (6.3.1) Inorder traversal (6.3.4) Euler Tour traversal (6.3.4) Template method pattern (6.3.5) Data structures for trees (6.4) C++ implementation (6.4.2) 2 Trees What is a Tree In computer science, a tree is an abstract model of a hierarchical structure A tree consists of nodes with a parent-child relation Applications: Organization charts File systems Programming environments ComputersRUs Sales R&D Manufacturing Laptops Desktops US International Europe Asia Canada 3 Trees subtee Tree Terminology Root: node without parent (A) Internal node: node with at least one child (A, B, C, F) Leaf (aka External node): node without children (E, I, J, K, G, H, D) Ancestors of a node: parent, grandparent, great-grandparent, etc. Depth of a node: number of ancestors Height of a tree: maximum depth of any node (3) Descendant of a node: child, grandchild, great-grandchild, etc. A B D C G H E F I J K Subtree: tree consisting of a node and its descendants 4 Trees Exercise: Trees Answer the following questions about the tree shown on the right: What is the size of the tree (number of nodes)? Classify each node of the tree as a root, leaf, or internal node List the ancestors of nodes B, F, G, and A. Which are the parents? List the descendents of nodes B, F, G, and A. Which are the children? List the depths of nodes B, F, G, and A. What is the height of the tree? Draw the subtrees that are rooted at node F and at node K.
A B D C G H E F I J K 5 Trees Tree ADT We use positions to abstract nodes Generic methods: integer size() boolean isEmpty() objectIterator elements() positionIterator positions() Accessor methods: position root() position parent(p) positionIterator children(p) Query methods: boolean isInternal(p) boolean isLeaf (p) boolean isRoot(p) Update methods: swapElements(p, q) object replaceElement(p, o) Additional update methods may be defined by data structures implementing the Tree ADT 6 Trees Preorder Traversal A traversal visits the nodes of a tree in a systematic manner In a preorder traversal, a node is visited before its descendants Application: print a structured document Algorithm preOrder(v) visit(v) for each child w of v preOrder(w) Make Money Fast! 1. Motivations References 2. Methods 2.1 Stock Fraud 2.2 Ponzi Scheme 1.1 Greed 1.2 Avidity 2.3 Bank Robbery 1 2 3 5 4 6 7 8 9 7 Trees Exercise: Preorder Traversal In a preorder traversal, a node is visited before its descendants List the nodes of this tree in preorder traversal order. Algorithm preOrder(v) visit(v) for each child w of v preOrder (w) A B D C G H E F I J K 8 Trees Postorder Traversal In a postorder traversal, a node is visited after its descendants Application: compute space used by files in a directory and its subdirectories Algorithm postOrder(v) for each child w of v postOrder(w) visit(v) cs16/ homeworks/ todo.txt 1K programs/ DDR.java 10K Stocks.java 25K h1c.doc 3K h1nc.doc 2K Robot.java 20K 9 3 1 7 2 4 5 6 8 9 Trees Exercise: Postorder Traversal Algorithm postOrder(v) for each child w of v postOrder(w) visit(v) In a postorder traversal, a node is visited after its descendants List the nodes of this tree in postorder traversal order. A B D C G H E F I J K 10 Trees Binary Tree A binary tree is a tree with the following properties: Each internal node has two children The children of a node are an ordered pair We call the children of an internal node left child and right child Alternative recursive definition: a binary tree is either a tree consisting of a single node, or a tree whose root has an ordered pair of children, each of which is a binary tree Applications: arithmetic expressions decision processes searching A B C F G D E H I 11 Trees Arithmetic Expression Tree Binary tree associated with an arithmetic expression internal nodes: operators leaves: operands Example: arithmetic expression tree for the expression (2 (a - 1) + (3 b)) +
- 2 a 1 3 b 12 Trees Decision Tree Binary tree associated with a decision process internal nodes: questions with yes/no answer leaves: decisions Example: dining decision Want a fast meal? How about coffee? On expense account? Starbucks Spikes Al Forno Caf Paragon Yes No Yes No Yes No 13 Trees Properties of Binary Trees Notation n number of nodes l number of leaves i number of internal nodes h height Properties: l = i + 1 n = 2l - 1 h i h (n - 1)/2 l 2 h h log 2 l h log 2 (n + 1) - 1
14 Trees BinaryTree ADT The BinaryTree ADT extends the Tree ADT, i.e., it inherits all the methods of the Tree ADT Additional methods: position leftChild(p) position rightChild(p) position sibling(p) Update methods may be defined by data structures implementing the BinaryTree ADT
15 Trees Inorder Traversal In an inorder traversal a node is visited after its left subtree and before its right subtree Application: draw a binary tree x(v) = inorder rank of v y(v) = depth of v Algorithm inOrder(v) if isInternal(v) inOrder(leftChild(v)) visit(v) if isInternal(v) inOrder(rightChild(v)) 3 1 2 5 6 7 9 8 4 16 Trees Exercise: Inorder Traversal In an inorder traversal a node is visited after its left subtree and before its right subtree List the nodes of this tree in inorder traversal order. A B D C G H E F I J K Algorithm inOrder(v) if isInternal(v) inOrder(leftChild(v)) visit(v) if isInternal(v) inOrder(rightChild(v)) 17 Trees Exercise: Preorder & InOrder Traversal Draw a (single) binary tree T, such that Each internal node of T stores a single character A preorder traversal of T yields EXAMFUN An inorder traversal of T yields MAFXUEN
18 Trees Print Arithmetic Expressions Specialization of an inorder traversal print operand or operator when visiting node print ( before traversing left subtree print ) after traversing right subtree Algorithm printExpression(v) if isInternal(v) print(() printExpression(leftChild(v)) print(v.element()) if isInternal(v) printExpression(rightChild(v)) print ()) +
- 2 a 1 3 b ((2 (a - 1)) + (3 b)) 19 Trees Evaluate Arithmetic Expressions Specialization of a postorder traversal recursive method returning the value of a subtree when visiting an internal node, combine the values of the subtrees Algorithm evalExpr(v) if isExternal(v) return v.element() else x evalExpr(leftChild(v)) y evalExpr(rightChild(v)) operator stored at v return x y +
- 2 5 1 3 2 20 Trees Exercise: Arithmetic Expressions Draw an expression tree that has Four leaves, storing the values 2, 5, 6, and 7 3 internal nodes, storing operations +, -, *, / (operators can be used more than once, but each internal node stores only one) The value of the root is 21
21 Trees Euler Tour Traversal Generic traversal of a binary tree Includes as special cases the preorder, postorder and inorder traversals Walk around the tree and visit each node three times: on the left (preorder) from below (inorder) on the right (postorder) +
- 2 5 1 3 2 L B R
22 Trees Template Method Pattern Generic algorithm that can be specialized by redefining certain steps Implemented by means of an abstract C++ class Visit methods that can be redefined by subclasses Template method eulerTour Recursively called on the left and right children A Result object with fields leftResult, rightResult and finalResult keeps track of the output of the recursive calls to eulerTour class EulerTour { protected: BinaryTree* tree; virtual void visitExternal(Position p, Result r) { } virtual void visitLeft(Position p, Result r) { } virtual void visitBelow(Position p, Result r) { } virtual void visitRight(Position p, Result r) { } int eulerTour(Position p) { Result r = initResult(); if (tree>isExternal(p)) { visitExternal(p, r); } else { visitLeft(p, r); r.leftResult = eulerTour(tree>leftChild(p)); visitBelow(p, r); r.rightResult = eulerTour(tree>rightChild(p)); visitRight(p, r); return r.finalResult; } // other details omitted 23 Trees Specializations of EulerTour We show how to specialize class EulerTour to evaluate an arithmetic expression Assumptions External nodes support a function value(), which returns the value of this node. Internal nodes provide a function operation(int, int), which returns the result of some binary operator on integers. class EvaluateExpression : public EulerTour { protected: void visitExternal(Position p, Result r) { r.finalResult = p.element().value(); } void visitRight(Position p, Result r) { Operator op = p.element().operator(); r.finalResult = p.element().operation( r.leftResult, r.rightResult); } // other details omitted }; 24 Trees
Data Structure for Trees A node is represented by an object storing Element Parent node Sequence of children nodes Node objects implement the Position ADT B D A C E F B
A D F
C
E 25 Trees Data Structure for Binary Trees A node is represented by an object storing Element Parent node Left child node Right child node Node objects implement the Position ADT B D A C E
B A D C E
26 Trees C++ Implementation Tree interface BinaryTree interface extending Tree Classes implementing Tree and BinaryTree and providing Constructors Update methods Print methods Examples of updates for binary trees expandExternal(v) removeAboveExternal(w) A
expandExternal(v) A C B B removeAboveExternal(w) A v v w 27