#include "ExtendedBinaryTree.h" #include ExtendedBinaryTree::ExtendedBinaryTree(Ware *rootNodeKey) { ExtendedBinaryTreeNode *root = new ExtendedBinaryTreeNode(rootNodeKey); this->rootNode = root; } ExtendedBinaryTreeNode *ExtendedBinaryTree::insert(Ware *key) { return this->rootNode->insert(key); } ExtendedBinaryTreeNode *ExtendedBinaryTree::search(int value) { ExtendedBinaryTreeNode *node = this->rootNode; while (value != node->key->getVerkaufspreis() && node != nullptr) { if (value > node->key->getVerkaufspreis()) { node = node->right; } else { node = node->left; } } return node; } ExtendedBinaryTreeNode *ExtendedBinaryTree::deleteItem(Ware *key) { return this->rootNode->deleteItem(key); } ExtendedBinaryTreeNode * ExtendedBinaryTree::findMin(ExtendedBinaryTreeNode *node) { while (node->left != nullptr) { node = node->left; } return node; } ExtendedBinaryTreeNode * ExtendedBinaryTree::findMax(ExtendedBinaryTreeNode *node) { while (node->right != nullptr) { node = node->right; } return node; } // function to print a tree in pre-order: (sub)root, left (sub)tree, right // (sub)tree std::string ExtendedBinaryTree::printPreorder(ExtendedBinaryTreeNode *node) { std::stringstream output; output << *(node->key) << std::endl; if (node->left != nullptr) { output << this->printPreorder(node->left); } if (node->right != nullptr) { output << this->printPreorder(node->right); } return output.str(); } std::string ExtendedBinaryTree::printPreorder() { return this->printPreorder(this->rootNode); } std::string ExtendedBinaryTree::printPostorder() { return this->printPostorder(this->rootNode); } std::string ExtendedBinaryTree::printPostorder(ExtendedBinaryTreeNode *node) { std::stringstream output; if (node->left != nullptr) { output << this->printPreorder(node->left); } if (node->right != nullptr) { output << this->printPreorder(node->right); } output << *(node->key) << std::endl; return output.str(); } std::string ExtendedBinaryTree::printInorder() { return this->printInorder(this->rootNode); } std::string ExtendedBinaryTree::printInorder(ExtendedBinaryTreeNode *node) { std::stringstream output; if (node->left != nullptr) { output << this->printPreorder(node->left); } output << *(node->key) << std::endl; if (node->right != nullptr) { output << this->printPreorder(node->right); } return output.str(); }