First Draft of 2.1

This commit is contained in:
Samuel Oberhofer 2022-06-01 19:27:14 +02:00
parent c963b3bcbe
commit 7e1d2fc945
6 changed files with 201 additions and 0 deletions

View File

@ -0,0 +1,62 @@
#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);
}

View File

@ -0,0 +1,25 @@
#include "ExtendedBinaryTreeNode.h"
#include <sstream>
#include <string>
#pragma once
class ExtendedBinaryTree {
public:
ExtendedBinaryTreeNode *rootNode;
ExtendedBinaryTree(Ware *rootNodeKey);
ExtendedBinaryTreeNode *search(int value);
ExtendedBinaryTreeNode *insert(Ware *key);
ExtendedBinaryTreeNode *deleteItem(Ware *key);
ExtendedBinaryTreeNode *findMin(ExtendedBinaryTreeNode *node);
ExtendedBinaryTreeNode *findMax(ExtendedBinaryTreeNode *node);
std::string printPreorder(ExtendedBinaryTreeNode *node);
std::string printPreorder();
};
// std::string printPreorder(BinaryTreeNode* node);
// /* -- Your TODO -- */
// std::string printPostorder(BinaryTreeNode* node);
// std::string printInorder(BinaryTreeNode* node);

View File

@ -0,0 +1,14 @@
#pragma once
#include "Ware.h"
class ExtendedBinaryTreeNode {
public:
Ware *key;
ExtendedBinaryTreeNode *left;
ExtendedBinaryTreeNode *right;
ExtendedBinaryTreeNode(Ware *key);
ExtendedBinaryTreeNode *insert(Ware *key);
ExtendedBinaryTreeNode *deleteItem(Ware *key);
};

51
Uebung 2/2.1/Makefile Normal file
View File

@ -0,0 +1,51 @@
# Name of the binary for Development
BINARY = main
# Name of the binary for Release
FINAL = prototyp
# Object files
OBJS = main.o
# Compiler flags
CFLAGS = -Werror -Wall -std=c++17 -fsanitize=address,undefined -g
# Linker flags
LFLAGS = -fsanitize=address,undefined
#Which Compiler to use
COMPILER = c++
# all target: builds all important targets
all: binary
final : ${OBJS}
${COMPILER} ${LFLAGS} -o ${FINAL} ${OBJS}
binary : ${OBJS}
${COMPILER} ${LFLAGS} -o ${BINARY} ${OBJS}
# Links the binary
${BINARY} : ${OBJS}
${COMPILER} ${LFLAGS} -o ${BINARY} ${OBJS}
# Compiles a source-file (any file with file extension .c) into an object-file
#
# "%" is a wildcard which matches every file-name (similar to * in regular expressions)
# Such a rule is called a pattern rule (because it matches a pattern, see https://www.gnu.org/software/make/manual/html_node/Pattern-Rules.html),
# which are a form of so called implicit rules (see https://www.gnu.org/software/make/manual/html_node/Implicit-Rules.html)
# "$@" and "$<" are so called automatic variables (see https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html)
%.o : %.cpp
${COMPILER} -c ${CFLAGS} -o $@ $<
# Rules can not only be used for compiling a program but also for executing a program
run: ${BINARY}
./${BINARY}
# Delete all build artifacts
clean :
rm -rf ${BINARY} ${OBJS}
# all and clean are a "phony" targets, meaning they are no files
.PHONY : all clean

46
Uebung 2/2.1/Ware.h Normal file
View File

@ -0,0 +1,46 @@
#pragma once
#include <iostream>
#include <string>
class Ware {
private:
std::string bezeichnung;
int seriennummer;
double gewicht;
double einkaufspreis;
double verkaufspreis;
public:
std::string getBezeichnung() const { return this->bezeichnung; }
void setBezeichnung(std::string bezeichnung) {
this->bezeichnung = bezeichnung;
}
int getSeriennummer() const { return this->seriennummer; }
void setSeriennummer(int seriennummer) { this->seriennummer = seriennummer; }
double getGewicht() const { return this->gewicht; }
void setGewicht(double gewicht) { this->gewicht = gewicht; }
double getEinkaufspreis() const { return this->einkaufspreis; }
void setEinkaufspreis(double einkaufspreis) {
this->einkaufspreis = einkaufspreis;
}
double getVerkaufspreis() const { return this->verkaufspreis; }
void setVerkaufspreis(double verkaufspreis) {
this->verkaufspreis = verkaufspreis;
}
Ware(std::string bezeichnung, int seriennummer, double gewicht,
double einkaufspreis, double verkaufspreis)
: bezeichnung(bezeichnung), seriennummer(seriennummer), gewicht(gewicht),
einkaufspreis(einkaufspreis), verkaufspreis(verkaufspreis) {}
};
std::ostream &operator<<(std::ostream &out, const Ware &ware);

3
Uebung 2/2.1/main.cpp Normal file
View File

@ -0,0 +1,3 @@
#include "ExtendedBinaryTreeNode.h"
int main(){};