I am a newbie in this world of data structures and algorithms (returning to these topics after 5 long years). Can someone please check if the code I have written for Binary Tree is OK?
Test-case 10, 3,11,11,5,0
PrintInorder 3,0,5,10,11,11
PrintPreOrder 10,3,0,5,11,11
PrintPostOrder 3,0,5,11,11,10
using namespace std;
template<typename T>
struct Node
{
T data;
Node<T>* left;
Node<T>* right;
Node()
{
left = nullptr;
right = nullptr;
}
};
template<typename T>
class BTree
{
public:
BTree();
~BTree();
void Add(T val);
void Print(int o);
T Find(T key);
private:
Node<T>* root;
Node<T>* temp;
int height;
Node<T>* Add(T val, Node<T>* node);
void PrintInorder(Node<T>* ptr);
void PrintPreOrder(Node<T>* ptr);
void PrintPostOrder(Node<T>* ptr);
};
template<typename T>
T BTree<T>::Find(T key)
{
Node<T>* current = this->root;
while (current!= nullptr)
{
if (current->data == key)
{
return current->data;
}
else if(current->data > key)
{
current = current->left;
continue;
}
else if (current->data < key)
{
current = current->right;
continue;
}
}
}
template<typename T>
void BTree<T>::PrintInorder(Node<T>* ptr)
{
PrintPreOrder(ptr->left);
cout<<ptr->data<<endl;
PrintPreOrder(ptr->right);
}
template<typename T>
void BTree<T>::PrintPostOrder(Node<T>* ptr)
{
PrintPreOrder(ptr->left);
PrintPreOrder(ptr->right);
cout<<ptr->data<<endl;
}
template<typename T>
BTree<T>::BTree()
{
root = nullptr;
height = 0;
}
template<typename T>
void BTree<T>::PrintPreOrder(Node<T>* ptr)
{
if (ptr!=nullptr)
{
cout<<ptr->data<<endl;
}
if(ptr->left!=nullptr)
PrintPreOrder(ptr->left);
if(ptr->right!=nullptr)
PrintPreOrder(ptr->right);
}
template<typename T>
void BTree<T>::Print(int o)
{
if (o==1)
{
PrintInorder(root);
}
else if (o==2)
{
PrintPreOrder(root);
}
else if(o==3)
{
PrintPostOrder(root);
}
}
template<typename T>
BTree<T>::~BTree()
{
}
template<typename T>
void BTree<T>:: Add(T val)
{
if (root==nullptr)
{
root = Add(val, nullptr);
}
else
{
root = Add(val,root);
}
}
template<typename T>
Node<T>* BTree<T>::Add(T val, Node<T>* node)
{
if (node == nullptr)
{
node = new Node<T>();
node->data = val;
return node;
}
else
{
if (val <= node->data)
{
node->left = Add(val,node->left);
}
else
{
node->right = Add(val,node->right);
}
}
return node;
}