#pragma once #include using namespace std; class binarySearchTree { private: class node { public: double data; node* right; node* left; node(double x) { data = x; right = nullptr; left = nullptr; } }; node* root; //inset x into tree rooted at node p void insert(double x, node* &p) { if (p == nullptr) p = new node(x); else { if (x < p->data) insert(x, p->left); else insert(x, p->right); } } //Print all items in tree rooted at node p //Pre-oder traveral void preOrder(node* p) { if (p == nullptr) { //ah! no nodes to print! super easy case. //saving so much time because we don't need to //write ANY code!!!!! } else { cout << p->data << endl; preOrder(p->left); preOrder(p->right); } } //Print all items in tree rooted at node p //In-order traveral void inOrder(node* p) { if (p == nullptr) { //ah! no nodes to print! super easy case. //saving so much time because we don't need to //write ANY code!!!!! } else { inOrder(p->left); cout << p->data << endl; inOrder(p->right); } } //post-order traveral void postOrder(node* p) { if (p == nullptr) { //ah! no nodes to print! super easy case. //saving so much time because we don't need to //write ANY code!!!!! } else { postOrder(p->left); postOrder(p->right); cout << p->data << endl; } } //Return the number of leaves in the tree rooted at node p. int numLeaves(node* p) { if (p == nullptr) return 0; else if (p->left == nullptr && p->right == nullptr) return 1; else //recursive case { return numLeaves(p->left) + numLeaves(p->right); } } //Return the height of the tree rooted at node p int height(node* p) { if (p == nullptr) return -1; else return 1 + max(height(p->left), height(p->right)); } //Remove smallest item from tree rooted at p, //return value that was removed. double extractMin(node*& p) { } public: binarySearchTree() { root = nullptr; } void insert(double x) { insert(x, root); } void display() { inOrder(root); } int numLeaves() { return numLeaves(root); } int height() { return height(root); } double extractMin() { return extractMin(root); } };