Witam wszystkich.
Mam pewien problem.
Mój program ma na podstawie utworzonego drzewa BST zrobić jego równoważenie.
Wszystko pięknie działa, ale...
działa jeżeli drzewo składa się z 1000 elementów. Gdy drzewo będzie większe to już wywala błąd "Stack Overflow"
oto kod:
funkcja obrotu w prawo:
bool BstTree::DSWRight(BstStructure* element){ //<----- w tym momencie występuje błąd kompilatora przy drzewie większym niż 1000
if (element == NULL) {
return false;
}
else {
BstStructure* leftChild = element->left;
if (leftChild != NULL) {
rotateRight(element);
DSWRight(leftChild);
}
else if (leftChild == NULL)
{
DSWRight(element->right);
}
else if (element->left == NULL && element->right == NULL) {
return false;
}
return true;
}
}
a tu funkcja, która odwraca elementy w prawo:
void BstTree::rotateRight(BstStructure* elementToRotate) {
BstStructure* leftKid = elementToRotate->left;
if (elementToRotate->left == NULL && elementToRotate->right == NULL) {
}
else {
if (elementToRotate->left != NULL) { // spraawdzamy czy ma lewego syna
if (elementToRotate == root) { // korzen
if (leftKid->right != NULL) { //sprawdzamy czy dzicko ma prawego syna
elementToRotate->left = leftKid->right;
leftKid->right = elementToRotate;
root = leftKid;
}
else {
elementToRotate->left = NULL;
leftKid->right = elementToRotate;
root = leftKid;
}
}
else // nie korzen
{
BstStructure* parent = findAddress(elementToRotate->key, 1);
parent->right = leftKid;
if (leftKid->right != NULL) {
elementToRotate->left = leftKid->right;
}
else
{
elementToRotate->left = NULL;
}
leftKid->right = elementToRotate;
}
}
}
}
Jakieś pomysły?