Lab 12
Lab 12
class TreeNode {
public:
TreeNode (int data) {
setData (data);
setLeft (NULL);
setRight (NULL);
}
void setData (int data) {
this->data = data;
}
void setRight (TreeNode* right) {
this->right = right;
}
void setLeft (TreeNode* left) {
this->left = left;
}
int getData () {
return data;
}
TreeNode* getRight () {
return right;
}
TreeNode* getLeft () {
return left;
}
private:
int data;
TreeNode* left;
TreeNode* right;
};
class BinarySearchTree {
public:
BinarySearchTree () {
setRoot (NULL);
}
bool isEmpty () {
return getRoot () == NULL;
}
void insertData (int data) {
/*
Steps
1. Check if the Tree is empty
1.1. insert a new TreeNode on the root
2. Call insertData () on root
*/
if (isEmpty ()) { // Step 1.
setRoot (new TreeNode (data)); // Step 1.1.
} else {
insertData (getRoot (), data); // Step 2.
}
}
void inOrder () {
inOrder (getRoot ());
}
private:
void inOrder (TreeNode* node) {
if (node != NULL) {
inOrder (node -> getLeft ());
cout << node -> getData () << " ";
inOrder (node -> getRight ());
}
}
void insertData (TreeNode* node, int data) {
/*
Steps
1. Check if the data of the node is smaller than the data
to be inserted
1.1. Check if the right child is empty
1.1.1. insert a new TreeNode of the node
1.2. Check if the right child is not empty
1.2.1. call insertData () on right child of the
node
2. Check if the data of the node is greater than the data
to be inserted
2.1. Check if the left child is empty
2.1.1. insert a new TreeNode of the node
2.2. Check if the left child is not empty
2.2.1. call insertData () on left child of the
node
*/
if (node -> getData () < data) { // Step 1
if (node -> getRight () == NULL) { // Step 1.1.
node -> setRight (new TreeNode (data)); // Step 1.1.1.
} else { // Step 1.2.
insertData (node -> getRight (), data); // Step 1.2.1
}
} else { // Step 2
if (node -> getLeft () == NULL) { // Step 2.1.
node -> setLeft (new TreeNode (data)); // Step 2.1.1.
} else { // Step 2.2.
insertData (node -> getLeft (), data); // Step 2.2.1
}
}
}
void setRoot (TreeNode* root) {
this->root = root;
}
TreeNode* getRoot () {
return root;
}
TreeNode* root;
};