Chapter 7 Trees Objectives Introduce general tree structure

Chapter 7: Trees Objectives: • • • Introduce general tree structure and Tree ADT Discuss the depth and height of trees Introduce the tree traversal algorithms Specialize to binary trees Implement binary trees with linked structure and array-list structure • Introduce the Template Method Pattern CSC 311: Data Structures 1

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: – – – Trees Organization charts File systems Programming environments Computers”R”Us Sales US Europe Manufacturing International Asia CSC 311: Data Structures Laptops R&D Desktops Canada 2

Tree Terminology Root: node without parent (A) Internal node: node with at least one child (A, B, C, F) External node (a. k. a. leaf ): node without children (E, I, J, K, G, H, D) Ancestors of a node: parent, grandgrandparent, etc. Depth of a node: number of ancestors Height of a tree: maximum depth of any node (3) Descendant of a node: child, grand-grandchild, etc. Trees Subtree: tree consisting of a node and its descendants A B E C F I CSC 311: Data Structures J G D H subtree K 3

Tree ADT We use positions to abstract nodes Generic methods: – – integer size() boolean is. Empty() Iterator iterator() Iterator positions() Accessor methods: – position root() – position parent(p) – position. Iterator children(p) Trees Query methods: – – – boolean is. Internal(p) is. External(p) is. Root(p) Update method: – object replace (p, o) Additional update methods may be defined by data structures implementing the Tree ADT CSC 311: Data Structures 4

Depth of a Node The depth of a node v in a tree T is defined as: Algorithm depth(T, v) Input: Tree T and a node v Output: an integer that is the depth of v in T – If v is the root, then its depth is 0; If v is the root of T then return 0 – Otherwise, its Else depth is one plus return 1 + depth(T, parent(v)) the depth of its parent Trees CSC 311: Data Structures 5

Height of a Node The height of a node v in a tree T is defined as: Algorithm height(T, v) Input: Tree T and a node v Output: an integer that is the height of v in T – If v is an external, then its height is 0; If v is an external of T then return 0 – Otherwise, its Else height is one plus h 0 the maximum for each child w of v in T do height of its h max(h, height(T, w)) children return 1+h Trees CSC 311: Data Structures 6

Features on Height 1. The height of a nonempty tree T is equal to the maximum depth of an external node of T 2. Let T be a tree with n nodes, and let cv denote the number if children of a node v of T. The summing over the vertices in T, vcv=n-1. Trees CSC 311: Data Structures 7

Preorder Traversal A traversal visits the nodes Algorithm pre. Order(v) of a tree in a systematic visit(v) manner for each child w of v In a preorder traversal, a node is visited before its preorder (w) descendants Application: print a 1 structured document Make Money Fast! 2 5 1. Motivations Trees 9 2. Methods 3 4 1. 1 Greed 1. 2 Avidity 6 2. 1 Stock Fraud CSC 311: Data Structures 7 2. 2 Ponzi Scheme References 8 2. 3 Bank Robbery 8

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 9 Algorithm post. Order(v) for each child w of v post. Order (w) visit(v) cs 16/ 3 7 homeworks/ Trees 8 todo. txt 1 K programs/ 1 2 h 1 c. doc 3 K h 1 nc. doc 2 K 4 DDR. java 10 K CSC 311: Data Structures 5 Stocks. java 25 K 6 Robot. java 20 K 9

Binary Trees Applications: A binary tree is a tree with the following properties: – arithmetic expressions – decision processes – searching – Each internal node has at most two children (exactly two for proper binary trees) – The children of a node are an ordered pair A 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 Trees CSC 311: Data Structures B C D F E H G I 10

Arithmetic Expression Tree Binary tree associated with an arithmetic expression – internal nodes: operators – external nodes: operands Example: arithmetic expression tree for the expression (2 (a - 1) + (3 b)) + - 2 a Trees 3 b 1 CSC 311: Data Structures 11

Decision Tree Binary tree associated with a decision process – internal nodes: questions with yes/no answer – external nodes: decisions Example: dining decision Want a fast meal? No Yes How about coffee? Trees On expense account? Yes No Starbucks Spike’s Al Forno Café Paragon CSC 311: Data Structures 12

Binary. Tree ADT The Binary. Tree ADT extends the Tree ADT, i. e. , it inherits all the methods of the Tree ADT Additional methods: Update methods may be defined by data structures implementing the Binary. Tree ADT – position left(p) – position right(p) – boolean has. Left(p) – boolean has. Right(p) Trees CSC 311: Data Structures 13

Properties of Proper Binary Trees Properties: – e=i+1 – n = 2 e - 1 – h i – h (n - 1)/2 – e 2 h – h log 2 e – h log 2 (n + 1) - 1 Notation n number of nodes e number of external nodes i number of internal nodes h height Trees CSC 311: Data Structures 14

Inorder Traversal In an inorder traversal a node is visited after its left subtree and before its right subtree Application: draw a binary tree Algorithm in. Order(v) if has. Left (v) in. Order (left (v)) visit(v) if has. Right (v) in. Order (right (v)) – x(v) = inorder rank of v – y(v) = depth of v 6 2 8 1 4 3 Trees 7 9 5 CSC 311: Data Structures 15

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 + - 2 a Trees 3 1 b Algorithm print. Expression(v) if has. Left (v) print(“(’’) in. Order (left(v)) print(v. element ()) if has. Right (v) in. Order (right(v)) print (“)’’) ((2 (a - 1)) + (3 b)) CSC 311: Data Structures 16

Evaluate Arithmetic Expressions Algorithm eval. Expr(v) if is. External (v) return v. element () – recursive method returning the value of a else subtree x eval. Expr(left. Child (v)) – when visiting an internal y eval. Expr(right. Child (v)) node, combine the operator stored at v values of the subtrees return x y + Specialization of a postorder traversal - 2 5 Trees 3 2 1 CSC 311: Data Structures 17

Euler Tour Traversal Generic traversal of a binary tree Includes a 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) + L 2 R B 5 Trees 3 2 1 CSC 311: Data Structures 18

Template Method Pattern Generic algorithm that can be specialized by redefining certain steps Implemented by means of an abstract Java class Visit methods that can be redefined by subclasses Template method euler. Tour Trees public abstract class Euler. Tour { protected Binary. Tree tree; protected void visit. External(Position p, Result r) { } protected void visit. Left(Position p, Result r) { } protected void visit. Below(Position p, Result r) { } protected void visit. Right(Position p, Result r) { } protected Object euler. Tour(Position p) { – Recursively called on Result r = new Result(); the left and right children if tree. is. External(p) { visit. External(p, r); } else { – A Result object with fields left. Result, visit. Left(p, r); right. Result and final. Result r. left. Result = euler. Tour(tree. left(p)); keeps track of the visit. Below(p, r); output of the recursive r. right. Result = calls to euler. Tour(tree. right(p)); CSC 311: Data Structures visit. Right(p, r); 19

Specializations of Euler. Tour We show to specialize class Euler. Tour to evaluate an arithmetic expression Assumptions Trees – External nodes store Integer objects – Internal nodes store Operator objects supporting method operation (Integer, Integer) public class Evaluate. Expression extends Euler. Tour { protected void visit. External(Position p, Result r) { r. final. Result = (Integer) p. element(); } protected void visit. Right(Position p, Result r) { Operator op = (Operator) p. element(); r. final. Result = op. operation( (Integer) r. left. Result, (Integer) r. right. Result ); } … } CSC 311: Data Structures 20

Linked Structure for Trees A node is represented by an object storing – Element – Parent node – Sequence of children nodes B Node objects implement the Position ADT A D F B C Trees F D A E C CSC 311: Data Structures E 21

Linked 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 B A Trees A D C D E CSC 311: Data Structures C E 22

Array-Based Representation of Binary Trees nodes are stored in an array 1 A … 2 3 B n let rank(node) be defined as follows: n n n Trees D 4 rank(root) = 1 if node is the left child of parent(node), rank(node) = 2*rank(parent(node)) if node is the right child of parent(node), rank(node) = 2*rank(parent(node))+1 CSC 311: Data Structures 5 E 6 7 C F 10 J 11 G H 23

Array-Based Representation of Binary Trees: Properties Let n be the number of nodes of a binary tree T n Let p. M be the maximum value of rank(v) over all the nodes of T n The array size N = p. M+1 n In the worst case, N = 2 n n Trees CSC 311: Data Structures 24
- Slides: 24