#include "sets.h" #include unsigned long BinTreeNode::counter = 0; BinTreeNode::BinTreeNode (int d) { left = right = 0; data = d; counter++; } BinTreeNode::~BinTreeNode () { --counter; } Set::~Set() { clear(); } #ifdef TREE Set::Set () { root = 0; size = 0; } bool insert (PBinTreeNode &t, int x) { if (t == 0) { t = new BinTreeNode(x); return true; } else if (t->data == x) { return false; } else if (x < t->data) return insert (t->left, x); else return insert (t->right, x); } Set& Set::add (int x) { if (insert (root, x)) size++; return *this; } bool Set::member (int x) const { BinTreeNode *t = root; while (t != 0) { if (t->data == x) return true; else if (x < t->data) t = t->left; else t = t->right; } return false; } void deleteAll (PBinTreeNode& t) { if (t != 0) { deleteAll(t->left); deleteAll(t->right); delete t; t = 0; } } Set& Set::clear() { size = 0; deleteAll(root); return *this; } #else Set::Set () { size = 0; } Set& Set::add (int x) { if (!member(x)) { members[size] = x; size++; } return *this; } bool Set::member (int x) const { for (int i = 0; i < size; i++) if (x == members[i]) return true; return false; } Set& Set::clear() { size = 0; return *this; } #endif