0% found this document useful (0 votes)
18 views

Lab 12

dsa code

Uploaded by

Hassaan Awais
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views

Lab 12

dsa code

Uploaded by

Hassaan Awais
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

#include <iostream>

using namespace std;

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;
};

int main (int argc, char** args) {


BinarySearchTree objBinarySearchTree;
objBinarySearchTree.insertData (75);
objBinarySearchTree.insertData (60);
objBinarySearchTree.insertData (100);
objBinarySearchTree.insertData (50);
objBinarySearchTree.insertData (54);
objBinarySearchTree.insertData (5);
objBinarySearchTree.insertData (28);
objBinarySearchTree.insertData (76);
objBinarySearchTree.insertData (189);
objBinarySearchTree.inOrder ();
return 957;
}

You might also like