Trees Main and Savitch Chapter 10 Binary Trees
Trees Main and Savitch Chapter 10
Binary Trees • A binary tree has nodes, similar to nodes in a linked list structure. • Data of one sort or another may be stored at each node. • But it is the connections between the nodes which characterize a binary tree.
A Binary Tree of States In this example, the data contained at each node is one of the 50 states.
A Binary Tree of States Each tree has a special node called its root, usually drawn at the top.
A Binary Tree of States Each tree has a special node called its root, usually drawn at the top. The example tree has Washington as its root.
A Binary Tree of States Each node is permitted to have two links to other nodes, called the left child and the right child.
A Binary Tree of States Children are usually drawn below a node. The left child of Washington is Arkansas. The right child of Washington is Colorado.
A Binary Tree of States Some nodes have only one child. Arkansas has a left child, but no right child.
A Quiz Some nodes have only one child. Which node has only a right child?
A Quiz Some nodes have only one child. Florida has only a right child.
A Binary Tree of States A node with no children is called a leaf.
A Binary Tree of States Each node is called the parent of its children. Washington is the parent of Arkansas and Colorado.
A Binary Tree of States Two rules about parents: ¶ The root has no parent. · Every other node has exactly one parent.
A Binary Tree of States Two nodes with the same parent are called siblings. Arkansas and Colorado are siblings.
Complete Binary Trees A complete binary tree is a special kind of binary tree which will be useful to us.
Complete Binary Trees A complete binary tree is a special kind of binary tree which will be useful to us. When a complete binary tree is built, its first node must be the root.
Complete Binary Trees The second node of a complete binary tree is always the left child of the root. . .
Complete Binary Trees The second node of a complete binary tree is always the left child of the root. . . and the third node is always the right child of the root.
Complete Binary Trees The next nodes must always fill the next level from left to right.
Complete Binary Trees The next nodes must always fill the next level from left to right.
Complete Binary Trees The next nodes must always fill the next level from left to right.
Complete Binary Trees The next nodes must always fill the next level from left to right.
Complete Binary Trees The next nodes must always fill the next level from left to right.
Complete Binary Trees The next nodes must always fill the next level from left to right.
Is This Complete?
Is This Complete?
Is This Complete?
Is This Complete?
Is This Complete? Yes! It is called the empty tree, and it has no nodes, not even a root.
Implementing a Complete Binary Tree • We will store the data from the nodes in a partially-filled array. 3 An integer to keep track of how many nodes are in the tree An array of data We don't care what's in this part of the array.
Implementing a Complete Binary Tree • We will store the date from the nodes in a partially-filled array. 3 An integer to keep track of how many nodes are in the tree Read Section 10. 2 to see details of how the entries are stored. An array of data We don't care what's in this part of the array.
Depth of Binary Tree This example, depth = 3
Depth of Binary Tree This example, depth = 2
Depth of Binary Tree This example, depth = 0
Depth of Complete Binary Tree Given a complete binary tree of N nodes, what is the depth? D=0 N=1 D=1 N=3 D=1 N=2 D=2 N=7 D=2 N=4
Depth of Complete Binary Tree Given a complete binary tree of N nodes, what is the depth? D=0 N=1 D=1 N=3 D=1 N=2 D=2 N=7 D = floor(log N) = O(log N) D=2 N=4
Depth of Binary Tree Given a binary tree of N nodes, what is the maximum possible depth? D=0 N=1 D=2 N=3 D = O(N) D=4 N=5
Summary • Binary trees contain nodes. • Each node may have a left child and a right child. • If you start from any node and move upward, you will eventually reach the root. • Every node except the root has one parent. The root has no parent. • Complete binary trees require the nodes to fill in each level from left-to-right before starting the next level.
Binary Search Trees • One of the tree applications in Chapter 10 is binary search trees. • In Chapter 10, binary search trees are used to implement bags and sets. • This presentation illustrates how another data type called a dictionary is implemented with binary search trees.
The Dictionary Data Type • A dictionary is a collection of items, similar to a bag. • But unlike a bag, each item has a string attached to it, called the item's key.
The Dictionary Data Type • A dictionary is a collection of items, similar to a bag. • But unlike a bag, each item has a string attached to it, called the item's key. Example: The items I am storing are records containing data about a state.
The Dictionary Data Type • A dictionary is a collection of items, similar to a bag. • But unlike a bag, each item has a string attached to it, called the item's key. Example: The key for each record is the name of the state. Washington
The Dictionary Data Type void Dictionary: : insert(The key for the new item, The new item); • The insertion procedure for a dictionary has two parameters. Wa n o t g shin
The Dictionary Data Type • When you want to retrieve an item, you specify the key. . . Item Dictionary: : retrieve("Washington");
The Dictionary Data Type p When you want to retrieve an item, you specify the key. . . and the retrieval procedure returns the item. Item Dictionary: : retrieve("Washington");
The Dictionary Data Type • We'll look at how a binary tree can be used as the internal storage mechanism for the dictionary.
A Binary Search Tree of States da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire The data in the dictionary will be stored in a binary tree, with each node containing an item and a key.
A Binary Search Tree of States da ri Flo Oklahoma Mass. Arkansas West Virginia Washington New Hampshire Storage rules: 1. Every key to the Colorado left of a node is alphabetically before the key of the node. Arizona
A Binary Search Tree of States da ri Flo Mass. Washington Arkansas West Virginia Example: ' Massachusetts' and ' New Hampshire' are alphabetically before 'Oklahoma' Oklahoma New Hampshire Storage rules: 1. Every key to the Colorado left of a node is alphabetically before the key of the node. Arizona
A Binary Search Tree of States da ri Flo Oklahoma Mass. West Virginia Washington New Hampshire Storage rules: 1. Every key to the Colorado left of a node is alphabetically before the key of the node. Arizona 2. Every key to the right of a node is alphabetically after Arkansas the key of the node.
A Binary Search Tree of States da ri Flo Oklahoma Mass. West Virginia Washington New Hampshire Storage rules: 1. Every key to the Colorado left of a node is alphabetically before the key of the node. Arizona 2. Every key to the right of a node is alphabetically after Arkansas the key of the node.
Retrieving Data da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire Start at the root. 1. If the current node has the key, then stop and retrieve the data. 2. If the current node's key is too large, move left and repeat 1 -3. 3. If the current node's key is too small, move right and repeat 1 -3.
Retrieve ' New Hampshire' da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire Start at the root. 1. If the current node has the key, then stop and retrieve the data. 2. If the current node's key is too large, move left and repeat 1 -3. 3. If the current node's key is too small, move right and repeat 1 -3.
Retrieve 'New Hampshire' da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire Start at the root. 1. If the current node has the key, then stop and retrieve the data. 2. If the current node's key is too large, move left and repeat 1 -3. 3. If the current node's key is too small, move right and repeat 1 -3.
Retrieve 'New Hampshire' da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire Start at the root. 1. If the current node has the key, then stop and retrieve the data. 2. If the current node's key is too large, move left and repeat 1 -3. 3. If the current node's key is too small, move right and repeat 1 -3.
Retrieve 'New Hampshire' da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire Start at the root. 1. If the current node has the key, then stop and retrieve the data. 2. If the current node's key is too large, move left and repeat 1 -3. 3. If the current node's key is too small, move right and repeat 1 -3.
Retrieval: Complexity • Given a complete tree of N items, the depth D = O(log N). • What is the maximum number of nodes tested to retrieve an item from the binary search tree if we use a complete tree? • What is the maximum number of nodes tested (worst case) to retrieve an item from a binary search tree that is not complete or balanced?
Adding a New Item with a Given Key da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire 1. Pretend that you are trying to find the key, but stop when there is no node to move to. 2. Add the new node at the spot where you would have moved to if there had been a node.
Iowa Adding da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire 1. Pretend that you are trying to find the key, but stop when there is no node to move to. 2. Add the new node at the spot where you would have moved to if there had been a node.
Iowa Adding da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire 1. Pretend that you are trying to find the key, but stop when there is no node to move to. 2. Add the new node at the spot where you would have moved to if there had been a node.
Iowa Adding da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire 1. Pretend that you are trying to find the key, but stop when there is no node to move to. 2. Add the new node at the spot where you would have moved to if there had been a node.
Iowa Adding da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire 1. Pretend that you are trying to find the key, but stop when there is no node to move to. 2. Add the new node at the spot where you would have moved to if there had been a node.
Iowa Adding da ri Flo Oklahoma Colorado Mass. Arizona Arkansas West Virginia Washington New Hampshire 1. Pretend that you are trying to find the key, but stop when there is no node to move to. 2. Add the new node at the spot where you would have moved to if there had been a node.
Adding da ri Flo Oklahoma Colorado Mass. Arizona Iowa Arkansas West Virginia Washington New Hampshire 1. Pretend that you are trying to find the key, but stop when there is no node to move to. 2. Add the new node at the spot where you would have moved to if there had been a node.
Ka zak hst an Adding da ri Flo Oklahoma Colorado Mass. Arizona Iowa Arkansas West Virginia Washington New Hampshire Where would you add this state?
Adding da ri Flo Oklahoma Colorado Mass. Arizona Iowa Arkansas Ka zak hst an West Virginia Washington New Hampshire Kazakhstan is the new right child of Iowa?
Adding: Complexity • Given a complete tree of N items, the depth D = O(log N). • What is the maximum number of nodes tested to add an item to the binary search tree if we use a complete tree? • What is the maximum number of nodes tested (worst case) to add an item from a binary search tree that is not complete or balanced?
Given da ri Flo Removing an Item with a Key 1. Find the item. 2. If necessary, swap Colorado the item with one that is easier to remove. 3. Remove the item. Arizona Oklahoma Mass. Arkansas New Hampshire Iowa Ka zak hst an West Virginia Washington
Removing 'Florida' da ri Flo 1. Find the item. Oklahoma Colorado Mass. Arizona Arkansas New Hampshire Iowa Ka zak hst an West Virginia Washington
Removing 'Florida' da ri Flo Oklahoma Colorado Mass. Arizona Arkansas New Hampshire Iowa Ka zak hst an West Virginia Florida cannot be removed at the moment. . . Washington
Removing 'Florida' Oklahoma Colorado Mass. Iowa Arkansas Ka zak hst an West Virginia Washington New Hampshire . . . because removing Florida would break the tree into two pieces. Arizona
Removing 'Florida' da ri Flo 1. If necessary, do some rearranging. Oklahoma Colorado Mass. Iowa Arkansas Ka zak hst an West Virginia Washington New Hampshire The problem of breaking the tree happens because Florida has 2 children. Arizona
Removing 'Florida' da ri Flo If necessary, do some rearranging. Oklahoma Colorado Mass. Arizona Arkansas New Hampshire Iowa Ka zak hst an West Virginia For the rearranging, take the smallest item in the right subtree. . . Washington
Removing 'Florida' Iowa If necessary, do some rearranging. Oklahoma Colorado Mass. Arizona Arkansas New Hampshire Iowa Ka zak hst an West Virginia . . . copy that smallest item onto the item that we're removing. . . Washington
Removing 'Florida' Iowa If necessary, do some rearranging. Oklahoma Colorado Mass. Arizona New Hampshire . . . and then remove the extra copy of the item we copied. . . Arkansas Ka zak hst an West Virginia Washington
Removing 'Florida' Iowa If necessary, do some rearranging. Oklahoma Colorado Mass. Arizona hst Arkansas an West Virginia Ka zak New Hampshire . . . and reconnect the tree Washington
Removing 'Florida' da ri Flo Oklahoma Colorado Mass. Arkansas Ka zak hst an West Virginia Washington New Hampshire Why did we choose the smallest item in the right subtree? Arizona
Removing 'Florida' Iowa Oklahoma Colorado Mass. Ka zak hst Arkansas an West Virginia Washington New Hampshire Because every key must be smaller than the keys in its right subtree Arizona
Removing an Item with a Key Given 1. Find the item. 2. If the item has a right child, rearrange the tree: – Find smallest item in the right subtree – Copy that smallest item onto the one that you want to remove – Remove the extra copy of the smallest item (making sure that you keep the tree connected) • else just remove the item.
Summary • Binary search trees are a good implementation of data types such as sets, bags, and dictionaries. • Searching for an item is generally quick since you move from the root to the item, without looking at many other items. • Adding and deleting items is also quick. • But as you'll see later, it is possible for the quickness to fail in some cases -- can you see why?
- Slides: 80