From 5627eac84bb4ba95af465d684e4c874f2eb841c8 Mon Sep 17 00:00:00 2001 From: Samuel Oberhofer Date: Mon, 6 Jun 2022 13:36:34 +0200 Subject: [PATCH] Initial Commit --- Uebung 2/2.1/ExtendedBinaryTreeNode.cpp | 62 +++++++++++++++++++++++++ Uebung 2/2.1/Ware.cpp | 9 ++++ 2 files changed, 71 insertions(+) create mode 100644 Uebung 2/2.1/ExtendedBinaryTreeNode.cpp create mode 100644 Uebung 2/2.1/Ware.cpp diff --git a/Uebung 2/2.1/ExtendedBinaryTreeNode.cpp b/Uebung 2/2.1/ExtendedBinaryTreeNode.cpp new file mode 100644 index 0000000..4dd16af --- /dev/null +++ b/Uebung 2/2.1/ExtendedBinaryTreeNode.cpp @@ -0,0 +1,62 @@ +#include "ExtendedBinaryTreeNode.h" + +#include + +ExtendedBinaryTreeNode::ExtendedBinaryTreeNode(Ware *key) { + this->key = key; + this->left = nullptr; + this->right = nullptr; +} + +ExtendedBinaryTreeNode *ExtendedBinaryTreeNode::insert(Ware *key) { + if (key->getVerkaufspreis() > this->key->getVerkaufspreis()) { + if (this->right == nullptr) { + ExtendedBinaryTreeNode *temp = new ExtendedBinaryTreeNode(key); + this->right = temp; + return this->right; + } + this->right->insert(key); + } else { + if (this->left == nullptr) { + ExtendedBinaryTreeNode *temp = new ExtendedBinaryTreeNode(key); + this->left = temp; + return this->left; + } + this->left->insert(key); + } + return this; +} + +ExtendedBinaryTreeNode *ExtendedBinaryTreeNode::deleteItem(Ware *key) { + ExtendedBinaryTreeNode *node = this; + + if (node == nullptr) { + return this; + } else if (key->getVerkaufspreis() < node->key->getVerkaufspreis()) { + node->left = node->left->deleteItem(key); + } else if (key->getVerkaufspreis() > node->key->getVerkaufspreis()) { + node->right = node->right->deleteItem(key); + } else { + if (node->left == nullptr && node->right == nullptr) { + delete node; + node = nullptr; + } else if (node->left == nullptr) { // only children in right subtree + ExtendedBinaryTreeNode *temp = node; + node = node->right; + delete temp; + } else if (this->right == nullptr) { // only children in left subtree + ExtendedBinaryTreeNode *temp = node; + node = node->left; + delete temp; + } else { // we have to keep the BST structure, here, we look for the minimum + // in the right subtree (see lecture) + ExtendedBinaryTreeNode *temp = node->right; + while (temp->left != nullptr) { + temp = temp->left; + } + node->key = temp->key; + node->right = node->right->deleteItem(temp->key); + } + } + return node; +} \ No newline at end of file diff --git a/Uebung 2/2.1/Ware.cpp b/Uebung 2/2.1/Ware.cpp new file mode 100644 index 0000000..5bfd735 --- /dev/null +++ b/Uebung 2/2.1/Ware.cpp @@ -0,0 +1,9 @@ +#include "Ware.h" + +std::ostream &operator<<(std::ostream &out, const Ware &ware) { + out << "Name: " << ware.getBezeichnung() << ", SN: " << ware.getSeriennummer() + << ", Gewicht: " << ware.getGewicht() + << ", EK: " << ware.getEinkaufspreis() + << ", VK: " << ware.getVerkaufspreis(); + return out; +} \ No newline at end of file