Drzewo BST - Algorytm DSW rekurencyjnie -> stack overflow

0

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?

1

Jak zawsze: zacznij od podbicia stosu, niemniej 1000 elementów to dość mało żeby ta rekurencja co popsuła.

0

Jak podbić stos ?

1

google: nazwa_kompilatora change stack size
Niemniej zacząłbym od użycia debuggera i np. valgrinda bo prędzej spodziewam sie ze napsułeś coś w kodzie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1