Ich möchte den Binary Search Tree "graphisch" mit der Library QPainter abbilden/zeichnen. Den Code für das Anhängen von Nodes, je nach Grösse der Value steht soweit. Ich benötige hier auch keinen fertigen Code - es geht mir lediglich um eine Verständnisfrage resp. um ein Ansatz, wie dies durchgeführt/aufgebaut werden soll... Hier die Ausgangslage:
Über mein main adde ich eine Value zu meinem Tree:
Code: Alles auswählen
#include "tree.h"
#include "node.h"
#include <QApplication>
int main(int argc, char **argv)
{
QApplication a(argc, argv);
Tree w; //Tree Objekt
w.add(10);
w.add(15);
w.add(12);
w.add(2);
w.add(23);
w.show();
return a.exec();
}
Code: Alles auswählen
#ifndef TREE_H
#define TREE_H
#include <QWidget>
#include "node.h"
class Tree : public QWidget
{
Q_OBJECT
private:
int value;
Node *root;
public:
explicit Tree(QWidget *parent = 0);
void add(int);
void setValue(int);
int getValue();
~Tree();
};
#endif // TREE_H
Tree::Tree(QWidget *parent) : QWidget(parent)
{
root = nullptr; //set root to null, it's empty at creation
}
void Tree::add(int v) //add value
{
Node *node = new Node(v);
if(root == nullptr){ //if root is empty, set value of root
this->root = node; // create root-node with value
} else {
this->root->addNode(node);
}
}
Code: Alles auswählen
Node::Node(int v)
{
this->value = v;
this->left = nullptr;
this->right = nullptr;
}
void Node::addNode(Node *n)
{
// if value is less than this-value (actual node), set left
if(n->value < this->value){
// create on left side, check if left is empty
if(this->left == nullptr){
this->left = n;
} else {
this->left->addNode(n);
}
//check if right is empty
} else if (n->value > this->value){
if(this->right == nullptr){
this->right = n;
} else {
this->right->addNode(n);
}
}
}
Wie ihr seht, steh ich zurzeit vor einer Wand... vermutlich lässt sich das ganze einfacher bauen, als ich denke. Bitte beachtet, dass ich keinen Code-Schnippsel benötige. Mir reichen zwei/drei Sätze. Wo würdet ihr die Paint-Methode einsetzen? wie würdet ihr weiter vorgehen?
Danke euch!
Gruss,
p3p3