39 Node(
const T& value) : data(value), left(
nullptr), right(
nullptr) {}
45 Node* insertRecursive(Node* node,
const T& value)
48 return new Node(value);
50 if (value < node->data)
51 node->left = insertRecursive(node->left, value);
53 node->right = insertRecursive(node->right, value);
59 Node* findMin(Node* node)
67 Node* removeRecursive(Node* node,
const T& value)
72 if (value < node->data)
73 node->left = removeRecursive(node->left, value);
74 else if (value > node->data)
75 node->right = removeRecursive(node->right, value);
80 Node* temp = node->right;
84 else if (!node->right)
86 Node* temp = node->left;
91 Node* temp = findMin(node->right);
92 node->data = temp->data;
93 node->right = removeRecursive(node->right, temp->data);
99 void inOrderRecursive(Node* node)
103 inOrderRecursive(node->left);
105 inOrderRecursive(node->right);
109 void clearRecursive(Node* node)
113 clearRecursive(node->left);
114 clearRecursive(node->right);
124 clearRecursive(root);
130 root = insertRecursive(root, value);
136 root = removeRecursive(root, value);
144 if (node->data == value)
146 return contains(value < node->data ? node->left : node->right, value);
158 clearRecursive(root);
165 inOrderRecursive(root);