Trees Outline and Reading Tree Definitions and ADT

  • Slides: 35
Download presentation
Trees

Trees

Outline and Reading • Tree Definitions and ADT (§ 7. 1) • Tree Traversal

Outline and Reading • Tree Definitions and ADT (§ 7. 1) • Tree Traversal Algorithms for General Trees (preorder and postorder) (§ 7. 2) • Binary. Trees (§ 7. 3) • Data structures for trees (§ 7. 1. 4 and § 7. 3. 4) • Traversals of Binary Trees (preorder, inorder, postorder) (§ 7. 3. 6) • Euler Tours (§ 7. 3. 7)

What is a Tree • In Computer Science, a tree is an abstract model

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 Computers”R”Us Sales US Europe Manufacturing International Asia Laptops Canada Desktops R&D

Tree Terminology • Subtree: tree consisting of a • Root: node without parent (A)

Tree Terminology • Subtree: tree consisting of a • Root: node without parent (A) node and its descendants • Internal node: node with at least one child (A, B, C, F) • Leaf (aka External node): node without A children (E, I, J, K, G, H, D) • Ancestors of a node: parent, grandparent, great-grandparent, etc. C B • Depth of a node: number of ancestors • Height of a tree: maximum depth of any node (3) G E F H subtee • Descendant of a node: child, grandchild, great-grandchild, etc. I J K D

Exercise: Trees • Answer the following questions about the tree shown on the right:

Exercise: Trees • Answer the following questions about the tree shown on the right: – What is the size of the tree (number of nodes)? B – 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? E – List the descendents of nodes B, F, G, and A. Which are the children? – List the depths of nodes B, F, G, and A. I – What is the height of the tree? – Draw the subtrees that are rooted at node F and at node K. A D C F J G K H

Tree ADT • We use positions to abstract nodes • Generic methods: • •

Tree ADT • We use positions to abstract nodes • Generic methods: • • integer size() boolean is. Empty() object. Iterator elements() position. Iterator positions() • Accessor methods: • position root() • position parent(p) • position. Iterator children(p) • Query methods: boolean is. Internal(p) • boolean is. Leaf (p) • boolean is. Root(p) Update methods: • swap. Elements(p, q) • object replace. Element(p, o) Additional update methods may be defined by data structures implementing the Tree ADT • • •

A Linked Structure for General Trees • A node is represented by an object

A Linked Structure for General 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 D A F C C E E

A Linked Structure for General Trees • A node is represented by an object

A Linked Structure for General 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 D A F C C E E

A Linked Structure for General Trees • A node is represented by an object

A Linked Structure for General 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 D A F C C E E

A Linked Structure for General Trees • A node is represented by an object

A Linked Structure for General 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 D A F C C E E

Preorder Traversal • A traversal visits the nodes of a tree in a systematic

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 pre. Order(v) visit(v) for each child w of v pre. Order(w) 1 Data Structures & Algorithms 2 2. Object-Oriented Design 1. A C++ Primer 3 1. 1 Basic C++ Programming Elements 9 5 4 1. 2 Expressions 6 2. 1 Goals, Principles, and Patterns 7 2. 2 Inheritance and Polymorphism Bibliography 8 2. 3 Templates

Exercise: Preorder Traversal • In a preorder traversal, a node is visited before its

Exercise: Preorder Traversal • In a preorder traversal, a node is visited before its descendants • List the nodes of this tree in preorder traversal order. A B E Algorithm pre. Order(v) visit(v) for each child w of v pre. Order (w) F I D C J G K H

Postorder Traversal • In a postorder traversal, a node is visited after its descendants

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 8 7 homeworks/ todo. txt 1 K programs/ 1 2 h 1 c. doc 3 K h 1 nc. doc 2 K 4 DDR. java 10 K 5 Stocks. java 25 K 6 Robot. java 20 K

Exercise: Postorder Traversal A • In a postorder traversal, a node is visited •

Exercise: Postorder Traversal A • In a postorder traversal, a node is visited • after its descendants List the nodes of this tree in postorder traversal order. B E Algorithm post. Order(v) for each child w of v post. Order(w) visit(v) F I D C J G K H

Binary Tree • A binary tree is a tree with the following properties: •

Binary Tree • A binary tree is a tree with the following properties: • Applications: • 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 arithmetic expressions decision processes searching • A B C D F E H I G

Arithmetic Expression Tree • Binary tree associated with an arithmetic expression • internal nodes:

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 3 1 b

Decision Tree • Binary tree associated with a decision process • internal nodes: questions

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? No Yes On expense account? How about coffee? Yes Starbucks No Antonio’s Yes Veritas No Chili’s

Properties of Binary Trees • Notation n number of nodes l number of leaves

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 = 2 l - 1 h i h (n - 1)/2 l 2 h h log 2 l h log 2 (n + 1) - 1

Properties of Binary Trees • Full (or proper) binary tree • All nodes have

Properties of Binary Trees • Full (or proper) binary tree • All nodes have either 0 or 2 children

Properties of Binary Trees • Complete binary tree with height h • All 2

Properties of Binary Trees • Complete binary tree with height h • All 2 h-1 nodes exist at height h-1 • Nodes at level h fill up left to right

Binary. Tree ADT • The Binary. Tree ADT extends the Tree ADT, i. e.

Binary. Tree ADT • The Binary. Tree ADT extends the Tree ADT, i. e. , it inherits all the methods of the Tree ADT • Additional methods: • position left. Child(p) • position right. Child(p) • position sibling(p) • Update methods may be defined by data structures implementing the Binary. Tree ADT

A Linked Structure for Binary Trees • A node is represented by an object

A Linked Structure for Binary Trees • A node is represented by an object storing • • • Element Parent node Left child node Right child node B Node objects implement the Position ADT B A A D C D E C E

Inorder Traversal • In an inorder traversal a node Algorithm in. Order(v) is visited

Inorder Traversal • In an inorder traversal a node Algorithm in. Order(v) is visited after its left subtree if is. Internal(v) and before its right subtree in. Order(left. Child(v)) • Application: draw a binary tree visit(v) • x(v) = inorder rank of v • y(v) = depth of v if is. Internal(v) in. Order(right. Child(v)) 6 2 8 1 4 3 7 5 9

Exercise: Inorder Traversal • In an inorder traversal a node is visited after its

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 E Algorithm in. Order(v) if is. Internal(v) in. Order(left. Child(v)) visit(v) if is. Internal(v) in. Order(right. Child(v)) C F I G K H

Exercise: Preorder & In. Order Traversal • Draw a (single) binary tree T, such

Exercise: Preorder & In. Order 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

Print Arithmetic Expressions • Algorithm print. Expression(v) if is. Internal(v) print(“(’’) • print operand

Print Arithmetic Expressions • Algorithm print. Expression(v) if is. Internal(v) print(“(’’) • print operand or operator when visiting node print. Expression(left. Child(v)) • print “(“ before traversing left print(v. element()) subtree if is. Internal(v) • print “)“ after traversing right print. Expression(right. Child(v)) subtree print (“)’’) + Specialization of an inorder traversal - 2 3 b ((2 (a - 1)) + (3 b)) a 1

Evaluate Arithmetic Expressions Algorithm eval. Expr(v) if is. Leaf(v) return v. element() else x

Evaluate Arithmetic Expressions Algorithm eval. Expr(v) if is. Leaf(v) return v. element() else x eval. Expr(left. Child(v)) y eval. Expr(right. Child(v)) operator stored at v return x y • Specialization of a postorder traversal • recursive method returning the value of a subtree • when visiting an internal node, combine the values of the subtrees + - 2 a 3 1 b

Exercise: Arithmetic Expressions • Draw an expression tree that has • Four leaves, storing

Exercise: Arithmetic Expressions • Draw an expression tree that has • Four leaves, storing the values 2, 4, 8, and 8 • 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 24

Exercise: Arithmetic Expressions • Draw an expression tree that has • Four leaves, storing

Exercise: Arithmetic Expressions • Draw an expression tree that has • Four leaves, storing the values 2, 4, 8, and 8 • 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 24 + + 8 8 2 4

Exercise: Arithmetic Expressions • Draw an expression tree that has • Four leaves, storing

Exercise: Arithmetic Expressions • Draw an expression tree that has • Four leaves, storing the values 1, 3, 4, and 8 • 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 24

Euler Tour Traversal • • • Generic traversal of a binary tree Includes as

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) + L 2 R B 5 3 1 2

Euler Tour Traversal Algorithm euler. Tour(p) left-visit-action(p) if is. Internal(p) euler. Tour(p. left()) bottom-visit-action(p)

Euler Tour Traversal Algorithm euler. Tour(p) left-visit-action(p) if is. Internal(p) euler. Tour(p. left()) bottom-visit-action(p) if is. Internal(p) euler. Tour(p. right()) right-visit-action(p) End Algorithm + L 2 R B 5 3 1 2

Print Arithmetic Expressions • Algorithm print. Expression(p) if is. External(p) then print value stored

Print Arithmetic Expressions • Algorithm print. Expression(p) if is. External(p) then print value stored at p Else print “(“ print. Expression(p. left()) Print the operator stored at p print. Expression(p. right()) print “)” Endif End Algorithm Specialization of an Euler Tour traversal • • • Left-visit-action: if node is internal, print “(“ Bottom-visit-action: print value or operator stored at node Right-visit-action: if node is internal, print “)” + - 2 3 b ((2 (a - 1)) + (3 b)) a 1

Template Method Pattern • Generic algorithm that can be specialized by redefining certain steps

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 euler. Tour • Recursively called on the left and right children • A Result object with fields left. Result, right. Result and final. Result keeps track of the output of the recursive calls to euler. Tour class Euler. Tour { protected: Binary. Tree* tree; virtual void visit. Leaf(Position p, Result r) { } virtual void visit. Left(Position p, Result r) { } virtual void visit. Below(Position p, Result r) { } virtual void visit. Right(Position p, Result r) { } int euler. Tour(Position p) { Result r = init. Result(); if (tree–>is. Leaf(p)) { visit. Leaf(p, r); return r. final. Result; } else { visit. Left(p, r); r. left. Result = euler. Tour(tree– >left. Child(p)); visit. Below(p, r); r. right. Result = euler. Tour(tree– >right. Child(p)); visit. Right(p, r); return r. final. Result;

Specializations of Euler. Tour • We show to specialize class Euler. Tour to evaluate

Specializations of Euler. Tour • We show to specialize class Euler. Tour 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 Evaluate. Expression : public Euler. Tour { protected: void visit. Leaf(Position p, Result r) { r. final. Result = p. element(). value(); } void visit. Right(Position p, Result r) { Operator op = p. element(). operator(); r. final. Result = op. operation( r. left. Result, r. right. Result); } // … other details omitted };