Professional Documents
Culture Documents
Trees
ERIN KEITH
18_BINARY_SEARCH_TREE 1
Topics
1. remove
2. getEntry
3. Uses
18_BINARY_SEARCH_TREE 2
Binary Search Tree
MUST MAINTAIN THIS STRUCTURE
• Binary tree that has the following properties for each node n:
• n’s value is > all values in n’s left subtree TL
• n’s value is < all values in n’s right subtree TR
• Both TL and TR are binary search trees
• A binary tree whose nodes contain objects and
• Data in a node is greater than the data in the node’s left child
• Data in a node is less than the data in the node’s right child
18_BINARY_SEARCH_TREE 3
Binary Search Tree
18_BINARY_SEARCH_TREE 4
Linked Implementation
#ifndef LINKED_BSEARCHTREE
#define LINKED_BSEARCHTREE
#include "LinkedBTreeNode.h"
#include "LinkedBTree.h"
template<class ItemType>
class LinkedBSearchTree: public LinkedBTree<ItemType>{
private:
LinkedBTreeNode<ItemType>* rootPtr;
18_BINARY_SEARCH_TREE 5
Linked Implementation
protected:
LinkedBTreeNode<ItemType>* placeNode(LinkedBTreeNode<ItemType>* subTreePtr,
LinkedBTreeNode<ItemType>* newNodePtr);
18_BINARY_SEARCH_TREE 6
Linked Implementation
public:
LinkedBSearchTree();
~LinkedBSearchTree();
};
#include "LinkedBSearchTree.cpp"
18_BINARY_SEARCH_TREE 7
#endif
Tree Implementation
The public tree interface functions are like a wrapper function that
gets called from outside the class.
The protected class function does the actual work using recursion.
template<class ItemType>
bool LinkedBSearchTree<ItemType>::remove(const ItemType& data){
LinkedBTreeNode<ItemType>* newNodePtr(newData);
bool success = false;
return success;
}
18_BINARY_SEARCH_TREE 8
Binary Search Tree
REMOVE
Steps
1. Find node with target value
2. Decide removal case
3. Remove
1. Find leftmost node
18_BINARY_SEARCH_TREE 9
Binary Search Tree
SEARCHING FOR NODE TO DELETE
Four cases
1.
2.
3.
4.
18_BINARY_SEARCH_TREE 10
Binary Search Tree
SEARCHING FOR NODE TO DELETE
Four cases
1. Node is not in tree
2. Current node is target
3. Current node is greater than target
4. Current node is less than target
18_BINARY_SEARCH_TREE 11
Linked Implementation
template<class ItemType>
LinkedBTreeNode<ItemType>* LinkedBSearchTree<ItemType>:: removeValue(LinkedBTreeNode<ItemType>*
subTreePtr, const ItemType& target, bool& isSuccessful){
if (subTreePtr == nullptr){
isSuccessful = false;
}
else if(subTreePtr->getItem() == target){
isSuccessful = true;
return removeNode(subTreePtr);
}
else if(subTreePtr->getItem() > target){
LinkedBTreeNode<ItemType>* tempPtr = removeValue(subTreePtr->getLeftChildPtr(), target,
isSuccessful);
subTreePtr->setLeftChildPtr(tempPtr);
}
else {
LinkedBTreeNode<ItemType>* tempPtr = removeValue(subTreePtr->getRightChildPtr(), target,
isSuccessful);
subTreePtr->setRightChildPtr(tempPtr);
}
return subTreePtr;
}
18_BINARY_SEARCH_TREE 12
Binary Search Tree
REMOVING NODE
Three cases
1. Node is a leaf
2. Node has only one child
3. Node has two children
18_BINARY_SEARCH_TREE 13
Linked Implementation
template<class ItemType>
LinkedBTreeNode<ItemType>* LinkedBSearchTree<ItemType>:: removeNode(LinkedBTreeNode
<ItemType>* nodePtr){
if (node is leaf){
delete node
}
else if(node has one child){
delete node
return that child (child will replace current node)
}
else { //node has two children
find inorder successor (leftmost node)
remove it
return inorder succesor (to replace current node)
}
}
18_BINARY_SEARCH_TREE 14
Binary Search Tree
FINDING INORDER SUCCESSOR (leftmost node)
Three cases
1. Node has left child
2. Node has no left child
18_BINARY_SEARCH_TREE 15
Linked Implementation
template<class ItemType>
LinkedBTreeNode<ItemType>* LinkedBSearchTree<ItemType>::
removeLeftmostNode(LinkedBTreeNode <ItemType>* nodePtr, ItemType& inorderSuccessor){
if(node->getLeftChildPtr() == nullptr){
inorderSuccessor = nodePtr->getItem();
return removeNode(nodePtr);
}
else {
tempPtr = removeLeftmostNode(nodePtr->getLeftChildPtr(), inorderSuccessor);
nodePtr->setLeftChildPtr(tempPtr);
return nodePtr;
}
}
18_BINARY_SEARCH_TREE 16
Binary Search Tree
SEARCHING FOR NODE
Four cases
1. Node is not in tree
2. Current node is target
3. Current node is greater than target
4. Current node is less than target
18_BINARY_SEARCH_TREE 17
Linked Implementation
template<class ItemType>
LinkedBTreeNode<ItemType>* LinkedBSearchTree<ItemType>:: findNode(LinkedBTreeNode
<ItemType>* subTreePtr, ItemType& target){
if (subTreePtr == nullptr || subTreePtr->getItem() == target){
return subTreePtr;
}
else if(subTreePtr->getItem() > target){
return findNode(subTreePtr->getLeftChildPtr(), target);
}
else {
return findNode(subTreePtr->getRightChildPtr(), target);
}
}
18_BINARY_SEARCH_TREE 18
Next Class
Red Black Trees
Textbook:
• Chapters 19.4
Internet:
•https://www.autonomousrobotslab.com/uploads/5/8
/4/4/58449511/cs302-123-red-black-trees.pdf
18_BINARY_SEARCH_TREE 19