Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to...

54
Spring 2010 CS 225 1 Trees Chapter 6

Transcript of Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to...

Page 1: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 1

Trees

Chapter 6

Page 2: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 2

Chapter Objectives• Learn to use a tree to represent a hierarchical

organization of information• Learn to use recursion to process trees• To understand the different ways of traversing a tree• To understand the difference between binary trees,

binary search trees, and heaps• To learn how to implement binary trees, binary

search trees, and heaps using linked data structures and arrays

• Learn to use a binary search tree to store information for efficient retrieval

• Learn how to use a Huffman tree to encode characters compactly

Page 3: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 3

Trees

• Trees are nonlinear– useful for hierarchical organization of data

• Trees are recursive

Page 4: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 4

Tree Terminology

• A tree consists of a collection of elements or nodes, with each node linked to its successors

• The node at the top of a tree is called its root• The links from a node to its successors are

called branches• The successors of a node are called its

children• The predecessor of a node is called its parent

Page 5: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 5

Tree Terminology

• Each node in a tree has exactly one parent except for the root node, which has no parent

• Nodes that have the same parent are siblings• A node that has no children is called a leaf

node• A subtree of a node is a tree whose root is a

child of that node

Page 6: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 6

Tree Terminology• The level of a node is a measure of its distance from

the root– If a node is the root, it has level 1– Otherwise, a nodes level is one more than the level of its

parent

• The height of a tree is the number of nodes in the longest path from the root to a leaf node– An empty tree has height 0– The height of a tree is the same as the largest level that any

node has

Page 7: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 7

Binary Trees• In a binary tree, each node has at most two subtrees• A set of nodes T is a binary tree if either of the

following is true– T is empty– Its root node has two subtrees, TL and TR, such

that TL and TR are binary trees

Page 8: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 8

Example 1:Expression tree

• Each node contains an operator or an operand– operator nodes have children– operand nodes are leaves

Page 9: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 9

Example 2: Huffman tree• Represents Huffman codes for characters that might

appear in a text file• Huffman code uses different numbers of bits to

encode letters as opposed to ASCII or Unicode

Page 10: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 10

Example 3: Binary Search Trees

• All elements in the left subtree precede those in the right subtree

Page 11: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 11

Fullness and Completeness• A binary tree of height n is perfect if it has

(2n-1) nodes• A binary tree is full if every node has two

children except for the leaves• A tree is complete if only the rightmost

node(s) in the next to last row don't have two children

Page 12: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 12

General Trees• Nodes of a general tree can have any number of

subtrees• A general tree can be represented using a binary tree

Page 13: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 13

Tree Traversals

• Often we want to determine the nodes of a tree and their relationship– Do this by walking through the tree in a prescribed

order and visiting the nodes as they are encountered

• This process is called tree traversal

– Itarators need to visit all nodes of a tree exactly once

• Three kinds of tree traversal– Inorder– Preorder– Postorder

Page 14: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 14

Preorder Tree Traversal

• Visit root node, traverse TL, traverse TR• Algorithmif the tree is empty returnelse visit the root do preorder traversal of left subtree do preorder traversal of right subtree

Page 15: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 15

Inorder Tree Traversals

• Traverse TL, visit root node, traverse TR

• Algorithmif the tree is empty returnelse do preorder traversal of left subtree visit the root do preorder traversal of right subtree

Page 16: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 16

Postorder Tree Traversals

• Traverse TL, Traverse TR, visit root node

• Algorithmif the tree is empty returnelse do preorder traversal of left subtree do preorder traversal of right subtree visit the root

Page 17: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 17

Visualizing Tree Traversals

• You can visualize a tree traversal by imagining a mouse that walks along the edge of the tree– If the mouse always keeps the tree to the left, it

will trace a route known as the Euler tour• Preorder traversal if we record each node as the mouse

first encounters it• Inorder if each node is recorded as the mouse returns

from traversing its left subtree• Postorder if we record each node as the mouse last

encounters it

Page 18: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 18

Visualizing Tree Traversals

Page 19: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 19

Traversals of Binary Search Trees

• An inorder traversal of a binary search tree results in the nodes being visited in sequence by increasing data value

Page 20: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 20

Traversals of Expression Trees

• An inorder traversal of an expression tree inserts parenthesis where they belong (infix form)

• A postorder traversal of an expression tree results in postfix form

• A preorder traversal of an expression results in prefix form

Page 21: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 21

Practice

• Traverse the following trees in all three orders

Page 22: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 22

Practice 2

• Draw an expression tree whose inorder traversal is

x / y + 3 * b / c• Draw an expression tree whose postorder

traversal is x y z + a b - c * / -• Draw an expression tree whose preorder

traversal is * + a - x y / c d

Page 23: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 23

Implementing trees

• Trees are generally implemented with linked structure similar to what we used for linked lists

• Nodes need to have references to at least two child nodes as well as the data

• A node may also have a parent reference.

Page 24: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 24

The Node<E> Class

• Just as for a linked list, a node consists of a data part and links to successor nodes

• The data part is a reference to type E• A binary tree node must have links to both its left and

right subtrees

Page 25: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 25

The BinaryTree<E> Class

Page 26: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 26

The BinaryTree<E> Class

Page 27: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 27

Binary Search Trees

• Binary search tree definition– A set of nodes T is a binary search tree if

either of the following is true• T is empty• Its root has two subtrees such that each is a

binary search tree and the value in the root is greater than all values of the left subtree but less than all values in the right subtree

Page 28: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 28

Binary Search Tree

http://www3.amherst.edu/~rjyanco94/literature/mothergoose/rhymes/thisisthehousethatjackbuilt.html

Page 29: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 29

Searching a Binary Tree

• Searching for kept or jill

Page 30: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 30

Class Search Tree

Page 31: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 31

BinarySearchTree Class

Page 32: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 32

BinarySearchTreeData

Page 33: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 33

Binary Search Tree Insertion

if the root is null create new node containing item to be the rootelse if item is the same as root data item is already in tree, return falseelse if item is less than root data search left subtreeelse search right subtree

Page 34: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 34

Binary Search Tree Delete

if root is null return nullelse if item is less than root data return result of deleting from left subtreeelse if item is greater than root data return result of deleting from right subtreeelse // need to replace the root save data in root to return replace the root (see next slide)

Page 35: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 35

Replacing root of a subtree

if root has no children set parent reference to local root to nullelse if root has one child set parent reference to root to childelse // find the inorder predecessor if left child has no right child set parent reference to left child else find rightmost node in right child of left

subtree and move its data to root

Page 36: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 36

Delete Example

Page 37: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 37

Practice

• Show the tree that would be created from the following items in the given order

happy, depressed, manic, sad, ecstatic• What happens if you add them in a

different order?• What happens if we add mad to the tree?

Page 38: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 38

Heaps and Priority Queues• In a heap, the value in a node is les

than all values in its two subtrees• A heap is a complete binary tree with

the following properties– The value in the root is the smallest item in

the tree– Every subtree is a heap

Page 39: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 39

Inserting an Item into a Heap

Page 40: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 40

Removing from a Heap

Page 41: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 41

Implementing a Heap• Because a heap is a complete binary tree, it

can be implemented efficiently using an array instead of a linked data structure

• First element for storing a reference to the root data

• Use next two elements for storing the two children of the root

• Use elements with subscripts 3, 4, 5, and 6 for storing the four children of these two nodes and so on

Page 42: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 42

Computing Positions

• Parent of a node at position c isparent = (c - 1) / 2

• Children of node at position p areleftchild = 2 p + 1rightchild = 2 p + 2

Page 43: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 43

Inserting into a Heap Implemented as an ArrayList

Page 44: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 44

Removing from a Heap Implemented as an ArrayList

Page 45: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 45

Using Heaps

• The heap is not very useful as an ADT on its own– Will not create a Heap interface or code a

class that implements it– Will incorporate its algorithms when we

implement a priority queue class and Heapsort

• The heap is used to implement a special kind of queue called a priority queue

Page 46: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 46

Priority Queues

• Sometimes a FIFO queue may not be the best way to implement a waiting line– What if some entries have higher priority than

others and need to be moved ahead in the line?• A priority queue is a data structure in which

only the highest-priority item is accessible

Page 47: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 47

Insertion into a Priority Queue

• Imagine a print queue that prints the shortest documents first

Page 48: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 48

The PriorityQueue Class• Java provides a PriorityQueue<E> class that implements

the Queue<E> interface given in Chapter 6. • Peek, poll, and remove methods return the smallest item

in the queue rather than the oldest item in the queue.

Page 49: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 49

Design of a KWPriorityQueue Class

Page 50: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 50

Huffman Trees

• A Huffman tree can be implemented using a binary tree and a PriorityQueue

• A straight binary encoding of an alphabet assigns a unique binary number to each symbol in the alphabet– Unicode for example

• The message “go eagles” requires 144 bits in Unicode but only 38 using Huffman coding

Page 51: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 51

Huffman Tree Example

Page 52: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 52

Huffman Trees

Page 53: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 53

Chapter Review

• A tree is a recursive, nonlinear data structure that is used to represent data that is organized as a hierarchy

• A binary tree is a collection of nodes with three components: a reference to a data object, a reference to a left subtree, and a reference to a right subtree

• In a binary tree used for arithmetic expressions, the root node should store the operator that is evaluated last

Page 54: Spring 2010CS 2251 Trees Chapter 6. Spring 2010CS 2252 Chapter Objectives Learn to use a tree to represent a hierarchical organization of information.

Spring 2010 CS 225 54

Chapter Review• A binary search tree is a tree in which the data stored

in the left subtree of every node is less than the data stored in the root node, and the data stored in the right subtree is greater than the data stored in the root node

• A heap is a complete binary tree in which the data in each node is less than the data in both its subtrees

• Insertion and removal in a heap are both O(log n)

• A Huffman tree is a binary tree used to store a code that facilitates file compression