Files
CSCI-1200/lectures/18_trees_I/ds_set_starter.h
2025-03-20 02:06:33 -04:00

74 lines
1.3 KiB
C++

template <class T>
class TreeNode {
public:
T key;
TreeNode* left;
TreeNode* right;
// constructor
TreeNode(const T& k) {
key = k;
left = NULL;
right = NULL;
}
};
// internally it's a binary search tree
template <class T>
class ds_set {
public:
ds_set(){
root = NULL;
m_size = 0;
}
int size() { return m_size; }
bool find(const T& key){
return find(key, root);
}
void insert(const T& key){
if(insert(key, root) == true){
++m_size;
}
}
private:
TreeNode<T>* root;
int m_size;
bool find(const T& key, TreeNode<T>* root);
bool insert(const T& key, TreeNode<T>*& root);
};
template <class T>
bool ds_set<T>::find(const T& key, TreeNode<T>* root){
// base case (if root doesn't even exist)
if(root == NULL){
return false;
}
// general case
if(key < root->key){
return find(key, root->left);
}else if(key > root->key){
return find(key, root->right);
}else{
return true;
}
}
template <class T>
bool ds_set<T>::insert(const T& key, TreeNode<T>*& root){
// base case (if root doesn't even exist)
if(root == NULL){
// make the first node.
root = new TreeNode<T>(key);
return true;
}
// general case
if(key < root->key){
return insert(key, root->left);
}else if(key > root->key){
return insert(key, root->right);
}else{
return false;
}
}