Algorithmen_Datenstrukturen/Uebung 2/2.1/ExtendedBinaryTree.cpp

62 lines
1.6 KiB
C++

#include "ExtendedBinaryTree.h"
#include <iostream>
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);
}