Chapter 15 Trees CS 302 - Data Structures Mehmet H Gunes Modified from authors’ slides.
-
Upload
jared-holmes -
Category
Documents
-
view
216 -
download
1
Transcript of Chapter 15 Trees CS 302 - Data Structures Mehmet H Gunes Modified from authors’ slides.
Chapter 15
Trees
CS 302 - Data StructuresMehmet H Gunes
Modified from authors’ slides
Content
• Terminology• The ADT Binary Tree• The ADT Binary Search Tree
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
• Use trees to represent relationships• Trees are hierarchical in nature
– “Parent-child” relationship exists between nodes in tree.
– Generalized to ancestor and descendant – Lines between the nodes are called edges
• A subtree in a tree is any node in the tree together with all of its descendants
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
Jake’s Pizza Shop
4
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
ROOT NODE
A Tree Has a Root Node
5
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
LEAF NODES
Leaf Nodes have No Children
6
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
LEVEL 0
A Tree Has Levels
7
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
LEVEL 1
Level One
8
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
LEVEL 2
Level Two
9
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
LEFT SUBTREE OF ROOT NODE
A Subtree
10
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
RIGHT SUBTREE OF ROOT NODE
Another Subtree
11
Terminology
(a) A tree; (b) a subtree of the tree in part a
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
(a) An organization chart; (b) a family tree
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Kinds of Trees
• General Tree– Set T of one or more nodes such that T is
partitioned into disjoint subsets• A single node r , the root• Sets that are general trees, called subtrees of r
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Kinds of Trees
• n -ary tree– set T of nodes that is either empty or partitioned
into disjoint subsets:• A single node r , the root• n possibly empty sets that are n -ary subtrees of r
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Kinds of Trees
• Binary tree– Set T of nodes that is either empty or partitioned
into disjoint subsets• Single node r , the root• Two possibly empty sets that are binary trees, called
left and right subtrees of r
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
A Binary Tree
Q
V
T
K S
A E
L
17
How many leaf nodes?
Q
V
T
K S
A E
L
18
How many descendants of Q?
Q
V
T
K S
A E
L
19
How many ancestors of K?
Q
V
T
K S
A E
L
20
Implementing a Binary Tree with Pointers and Dynamic Data
Q
V
T
K S
A E
L
21
Node Terminology for a Tree Node
22
Example: Algebraic Expressions.
• Binary trees that represent algebraic expressions
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Binary Search Tree
• For each node n, a binary search tree satisfies the following three properties:– n ’s value is greater than all values in its left
subtree T L
– n ’s value is less than all values in its right subtree T R
– Both T L and T R are binary search trees
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Binary Search Tree
• A binary search tree of names
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Depends on its key values and their order of insertion.
Insert the elements ‘J’ ‘E’ ‘F’ ‘T’ ‘A’ in that order.
The first value to be inserted is put into the root node.
Shape of a binary search tree . .
‘J’
26
Thereafter, each value to be inserted begins by comparing itself to the value in the root node, moving left if it is less, or moving right if it is greater.
This continues at each level until it can be inserted as a new leaf.
‘J’
‘E’
27
Inserting ‘F’ into the BST
Begin by comparing ‘F’ to the value in the root node, moving left it is less, or moving right if it is greater.
This continues until it can be inserted as a leaf.
‘J’
‘E’
‘F’
28
Inserting ‘F’ into the BST
Begin by comparing ‘T’ to the value in the root node, moving left it is less, or moving right if it is greater.
This continues until it can be inserted as a leaf.
‘J’
‘E’
‘F’
‘T’
29
Inserting ‘F’ into the BST
Begin by comparing ‘A’ to the value in the root node, moving left it is less, or moving right if it is greater.
This continues until it can be inserted as a leaf.
‘J’
‘E’
‘F’
‘T’
‘A’
30
Inserting ‘A’ into the BST
is obtained by inserting the elements ‘A’ ‘E’ ‘F’ ‘J’ ‘T’ in that order?
What binary search tree . . .
‘A’
31
obtained by inserting the elements ‘A’ ‘E’ ‘F’ ‘J’ ‘T’ in that order.
Binary search tree . . .
‘A’
‘E’
‘F’
‘J’
‘T’
32
Another binary search tree
Add nodes containing these values in this order:
‘D’ ‘B’ ‘L’ ‘Q’ ‘S’ ‘V’ ‘Z’
‘J’
‘E’
‘A’ ‘H’
‘T’
‘M’
‘K’ ‘P’
33
Is ‘F’ in the binary search tree?
34
‘J’
‘E’
‘A’ ‘H’
‘T’
‘M’
‘K’
‘V’
‘P’ ‘Z’‘D’
‘Q’‘L’‘B’
‘S’
The Height of Trees• Definition of the level of a node n :
– If n is the root of T , it is at level 1– If n is not the root of T , its level is 1 greater than
the level of its parent
• Height of a tree T in terms of the levels of its nodes– If T is empty, its height is 0– If T is not empty, its height is equal to the maximum
level of its nodes
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
The Height of Trees
• Binary trees with the same nodes but different heights
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Full, Complete, and Balanced Binary Trees
• A full binary tree of height 3
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Full, Complete, and Balanced Binary Trees
• Definition of a full binary tree– If T is empty, T is a full binary tree of height 0
– If T is not empty and has height h > 0, T is a full binary tree if its root’s subtrees are both full binary trees of height h – 1
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Full, Complete, and Balanced Binary Trees
• A complete binary tree
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Definitions
Full Binary Tree: A binary tree in which all of the leaves are on the same level and every nonleaf node has two children
40
Definitions (cont.)
Complete Binary Tree: A binary tree that is either full or full through the next-to-last level, with the leaves on the last level as far to the left as possible
41
Examples of Different Types of Binary Trees
42
The Maximum and Minimum Heights of a Binary Tree
• The maximum height of an n -node binary tree is n
• Binary trees of height 3
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
The Maximum and Minimum Heights of a Binary Tree
• Counting the nodes in a full binary tree of height h
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Facts about Full Binary Trees
• A full binary tree of height h ≥ 0 has 2 h – 1 nodes
• You cannot add nodes to a full binary tree without increasing its height
• The maximum number of nodes that a binary tree of height h can have is 2 h – 1
• The minimum height of a binary tree with n nodes is [log 2 ( n + 1)]
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
The Maximum and Minimum Heights of a Binary Tree
• Filling in the last level of a tree
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Traversals of a Binary Tree
• General form of recursive transversal algorithm
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Traversals of a Binary Tree
• Preorder traversal
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Traversals of a Binary Tree
• Three traversals of a binary tree
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Printing all the Nodes in Order
50
Three Tree Traversals
51
Traversals of a Binary Tree
• Inorder traversal.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Traversals of a Binary Tree
• Postorder traversal.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Binary Tree Operations
• Test whether a binary tree is empty.• Get the height of a binary tree.• Get the number of nodes in a binary tree.• Get the data in a binary tree’s root.• Set the data in a binary tree’s root.• Add a new node containing a given data item
to a binary tree.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Binary Tree Operations
• Remove the node containing a given data item from a binary tree.
• Remove all nodes from a binary tree.• Retrieve a specific entry in a binary tree.• Test whether a binary tree contains a specific
entry.• Traverse the nodes in a binary tree in
preorder, inorder, or postorder.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Binary Tree Operations
UML diagram for the class BinaryTreeData Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Binary Tree Operations
• Formalized specifications demonstrated in interface template for binary tree– Listing 15-1
• Note method names matching UML diagram– Figure 15-12
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
The ADT Binary Search Tree
• ADT binary tree ill suited for search for specific item
• Binary search tree solves problem
• Properties of each node, n– n ’s value greater than all values in left subtree TL
– n ’s value less than all values in right subtree TR
– Both TR and TL are binary search trees
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
The ADT Binary Search Tree
• A binary search tree of names
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
The ADT Binary Search Tree
Binary search trees with the same data
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
The ADT Binary Search Tree
Binary search trees with the same data
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
The ADT Binary Search Tree
Binary search trees with the same data
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Binary Search Tree Operations
• Test whether binary search tree is empty.• Get height of binary search tree.• Get number of nodes in binary search tree.• Get data in binary search tree’s root.• Insert new item into binary search tree.• Remove given item from binary search tree.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Binary Search Tree Operations
• Remove all entries from binary search tree.• Retrieve given item from binary search tree.• Test whether binary search tree contains
specific entry.• Traverse items in binary search tree in
– Preorder– Inorder– Postorder.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Searching a Binary Search Tree
• Search algorithm for binary search tree
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Searching a Binary Search Tree
• An array of names in sorted order
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Creating a Binary Search Tree
Empty subtree where the search algorithm terminates when looking for Frank
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Traversals of a Binary Search Tree
• Algorithm
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Deleting a Leaf Node
Delete Z
69
Delete R
Deleting a Node with One Child
70
Deleting a Node with Two Children
Delete Q
71
Efficiency of Binary Search Tree Operations
• The Big O for the retrieval, insertion, removal, and traversal operations of the ADT binary search tree
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013