Witam.
Piszę program do rysowania drzew. Niestety napotkałem problem z pisaniem drzewa tzn. nie wiem dlaczego nie tworzy mi drzewa.
Oto kod:
tree.cpp
#include "tree.h"
int Tree :: s_count = 0;
Tree::Tree()
{
left = 0;
right = 0;
root = 0;
number = 0;
}
void Tree :: setNumber(int number)
{
this->number = number;
}
void Tree :: setLeft(Tree * left)
{
this->left = left;
}
void Tree :: setRight(Tree * right)
{
this->right = right;
}
void Tree :: setRoot(Tree * root)
{
this->root = root;
}
int Tree :: getNumber()
{
return this->number;
}
Tree * Tree :: getLeft()
{
return this->left;
}
Tree * Tree :: getRight()
{
return this->right;
}
Tree * Tree :: getRoot()
{
return this->root;
}
void Tree :: setNewTree(Tree * tree, QChar c, int l)
{
if(tree == 0){
tree = new Tree();
tree->setNumber(l);
Tree::s_count++;
}
else if(c == 'x'){
setNewTree(tree->left, c, l);
}
else if(c == 'y'){
setNewTree(tree->right, c, l);
}
}
mainwindows.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
result = new QLabel(this);
text = new QString();
wsk = new Tree();
wsk->setNumber(999);
result->setGeometry(0, 100, 200, 200);
result->setStyleSheet("color:red;border: 1px solid black;");
infoDate = new QLabel(this);
infoDate->setGeometry(0, 0, 100, 20);
infoDate->setText("Wprowadz dane: ");
fieldText = new QLineEdit(this);
fieldText->setText("0");
fieldText->setGeometry(100, 0, 100, 20);
enterDate = new QPushButton(this);
enterDate->setText("-> OK");
enterDate->setGeometry(200, 0, 40, 20);
enterDate->installEventFilter(this);
connect(enterDate, SIGNAL(pressed()), this, SLOT(ok()));
}
void MainWindow :: ok()
{
int i;
int dlugosc;
wsk->setNewTree(wsk, 'x', 11);
wsk->setNewTree(wsk, 'y', 22);
result->setText(showTree(wsk));
//result->setText(QString::number(Tree::s_count));
}
QString MainWindow :: showTree(Tree * wsk)
{
if(wsk){
str+= "->";
str+= QString::number(wsk->getNumber());
str+= "<br>";
showTree(wsk->getLeft());
showTree(wsk->getRight());
}
return str;
}
Tzn. Owy program wyświetli wynik ->999 , czyli numer 1 węzła(korzenia), dalej nie chce wypisywać. Tak mi się wydaję, że jeśli nie chce wypisywać w if(wsk){} to prawdopodobnie wskaźniki lewego i prawego syna drzewa są NULL, więc problemu należy szukać wyżej.
Natomiast linia ta:
result->setText(QString::number(Tree::s_count));
Wyświetla 2, czyli utworzenie dwóch nowych drzew. Więc sam już nie wiem czy problem przy wyświetlaniu czy przy tworzeniu?
Jakieś pomysły?