I am learning C++ and today I've implemented a version of the binary search tree. I would like your thoughts about it.
node.h
#pragma once
struct Node
{
int val;
Node *left;
Node *right;
};
bTree.h
#include "node.h"
#pragma once
class BTree
{
private:
Node *root;
void addValue(int n, Node *node);
void traverse(Node *node);
Node* search(int n, Node *node);
public:
BTree();
void addValue(int n);
void traverse();
void search(int n);
};
bTree.cpp
#include <iostream>
#include "bTree.h"
BTree::BTree()
{
root = nullptr;
}
void BTree::addValue(int n, Node *node) {
if (n < node->val)
{
if (node->left != nullptr)
{
addValue(n, node->left);
}
else
{
node->left = new Node;
node->left->val = n;
node->left->left = nullptr;
node->left->right = nullptr;
}
}
else if (n >= node->val)
{
if (node->right != nullptr)
{
addValue(n, node->right);
}
else
{
node->right = new Node;
node->right->val = n;
node->right->left = nullptr;
node->right->right = nullptr;
}
}
}
void BTree::traverse(Node *node) {
if (node->left != nullptr)
traverse(node->left);
std::cout << node->val << ' ';
if (node->right != nullptr)
traverse(node->right);
}
Node* BTree::search(int n, Node *node) {
if (node != nullptr)
{
if (node->val == n)
return node;
else if (n < node->val)
return search(n, node->left);
else if (n > node->val)
return search(n, node->right);
}
else
return nullptr;
}
void BTree::addValue(int n) {
if (root == nullptr)
{
root = new Node;
root->val = n;
root->left = nullptr;
root->right = nullptr;
}
else
{
addValue(n, root);
}
}
void BTree::traverse() {
if (root == nullptr)
{
std::cout << "No nodes in the tree" << std::endl;
}
else
{
traverse(root);
}
}
void BTree::search(int n) {
if (root == nullptr)
{
std::cout << "No nodes in the tree" << std::endl;
}
else
{
if (search(n, root))
std::cout << n << " found" << std::endl;
else
std::cout << n << " not found" << std::endl;
}
}
main.cpp
#include <iostream>
#include "bTree.h"
#include <ctime>
int main()
{
srand(static_cast<unsigned int>(time(0)));
rand();
BTree bTree{};
for (int i = 0; i < 50; i++)
{
int n = rand() % 100;
std::cout << n << ' ';
bTree.addValue(n);
}
std::cout << std::endl << std::endl;
bTree.traverse();
std::cout << std::endl << std::endl;
for (int i = 0; i < 10; i++)
{
int n = rand() % 100;
bTree.search(n);
}
std::cout << std::endl << std::endl;
system("pause");
return 0;
}