BinarySearchTrees by Wilder
BinarySearchTrees by Wilder
Trees
Binary Search
Trees
Binary Search
Trees
Binary Search
Trees
45
9 53
3 17 51 54
NULL 20
Binary Search
Trees
Binary Search
Trees
static DATA_TYPE A[] = { 51, 31, 67, 23, 43, 57, 83, 17, 29, 79 };
static int nA = sizeof(A)/sizeof(DATA_TYPE);
t1:
83
79
67
57
51
43
31
29
23
17
Binary Search
Trees
/* BSTree2.h
*
* Binary Search Tree class Interface WITH deletion.
*/
#ifndef _BSTREE_H_
#define _BSTREE_H_
class BinarySearchTree
{
private:
typedef struct BSTreeNode
{
DATA_TYPE data;
BSTreeNode *leftPtr;
BSTreeNode *rightPtr;
} *TreePtr;
Binary Search
Trees
void InitBSTree()
{ rootPtr = NULL; }
void DeleteNode(
TreePtr& treePtr, DATA_TYPE theItem );
void DeleteNodeItem( TreePtr& treePtr );
void ProcessLeftMost(
TreePtr& treePtr, DATA_TYPE& theItem );
Binary Search
Trees
void PrintBST_BackwardInOrder(
TreePtr treePtr, int depth );
Binary Search
Trees public:
BinarySearchTree() { InitBSTree(); }
~BinarySearchTree();
bool IsEmpty()
{ return (rootPtr == NULL); }
void PrintTree();
void PrintInOrder();
void PrintPreOrder();
void PrintPostOrder();
void PrintBackwardInOrder();
};
#endif
Binary Search
Trees
/* BSTree2.cpp
*
* Binary Search Tree Implementation with Deletion.
*/
#include <iostream.h>
#include "BSTree2.h"
BinarySearchTree::~BinarySearchTree()
{
DeleteBST( rootPtr );
}
Binary Search
Trees
Binary Search
Trees // AddNode()
// Add (insert) new item into the BST, whose
// root node is pointed to by "rootPtr". If
// the data already exists, it is ignored.
Binary Search
Trees
else // Look for the insertion location
{
TreePtr treePtr = rootPtr;
TreePtr targetNodePtr;
Binary Search
Trees
Binary Search
Trees
// DeleteBST()
// Delete an entire BST. All memory is released
// using a "PostOrder" traversal method.
delete treePtr;
treePtr = NULL;
}
}
Binary Search
Trees
BinarySearchTree::TreePtr
BinarySearchTree::SearchNodeInBST(
TreePtr treePtr, DATA_TYPE key )
{
if( treePtr != NULL ) {
if( key == treePtr->data )
return treePtr;
else if( key < treePtr->data )
// Search for "key" in left subtree
SearchNodeInBST( treePtr->leftPtr, key );
else // (key > tree_ptr->data)
// Search for "key" in right subtree
SearchNodeInBST( treePtr->rightPtr, key );
}
else {
return NULL;
}
} Binary Search Trees
PrintTree() – public
Binary Search
Trees
// PrintTree()
// Print a BST tree uses InOrder traversal by default.
void BinarySearchTree::PrintTree()
{
PrintBST_InOrder( rootPtr );
}
Binary Search
Trees
// PrintInOrder()
// Print BST using InOrder traversal
void BinarySearchTree::PrintInOrder()
{
PrintBST_InOrder( rootPtr );
}
void BinarySearchTree::PrintBST_InOrder(
TreePtr treePtr )
{
if( treePtr != NULL)
{
// Print left BST subtree
PrintBST_InOrder( treePtr->leftPtr );
// Print Root node data
cout << treePtr->data << endl;
// Print right BST subtree
PrintBST_InOrder( treePtr->rightPtr );
}
}
Binary Search
Trees
// PrintPreOrder()
// Print BST using PreOrder traversal
void BinarySearchTree::PrintPreOrder()
{
PrintBST_PreOrder( rootPtr );
}
void BinarySearchTree::PrintBST_PreOrder(
TreePtr treePtr )
{
if( treePtr != NULL )
{
// Print node data
cout << treePtr->data << endl;
// Print left subtree
PrintBST_PreOrder( treePtr->leftPtr );
// Print right subtree
PrintBST_PreOrder( treePtr->rightPtr );
}
}
Binary Search
Trees
// PrintPostOrder()
// Print BST using PostOrder traversal
void BinarySearchTree::PrintPostOrder()
{
PrintBST_PostOrder( rootPtr );
}
void BinarySearchTree::PrintBST_PostOrder(
TreePtr treePtr )
{
if( treePtr != NULL )
{
// Print left BST subtree
PrintBST_PostOrder( treePtr->leftPtr );
// Print right BST subtree
PrintBST_PostOrder( treePtr->rightPtr );
// Print node data
cout << treePtr->data << endl;
}
}
void BinarySearchTree::PrintBackwardInOrder()
{
PrintBST_BackwardInOrder( rootPtr, 0 );
}
void BinarySearchTree::PrintBST_BackwardInOrder(
TreePtr treePtr, int depth )
{
const int INDENT = 4;
Binary Search
Trees
/* TestBSTree.cpp
* Test Binary Search Tree (BST)
*/
#include <iostream.h>
#include "BSTree2.h"
int main()
{
static DATA_TYPE A[8] = { 15, 53, 13, 61,
57, 47, 21, 51 };
static int nA = sizeof(A)/sizeof(DATA_TYPE);
Binary Search
Trees
BinarySearchTree t1;
BinarySearchTree t2;
Binary Search
Trees
t2.SearchNode(45);
t2.SearchNode(48);
return EXIT_SUCCESS;
}
Binary Search Trees
Output
Binary Search
Trees
Binary Search
Trees
13
15
21
47
51
53
57
61
Binary Search
Trees
15
13
53
47
21
51
61
57
Binary Search
Trees
13
21
51
47
57
61
53
15