Witam, chcę zrobić drzewo wyższego rzędu i dodawać do niego wartości po czym sprawdzać czy mając wartości x i y to czy y znajduję się w poddrzewie w którym x jest korzeniem. Napisałem coś takiego i z chęcią posłuchałbym jak poprawić pojawiające się błędy.
class wezel
{
public:
unsigned long int wartosc;
wezel *dzieci[100000];
wezel *rodzic;
void Add(unsigned long int parent, unsigned long int ja);
bool Search(unsigned long int przodek, unsigned long int potomek, unsigned long int n);
};
void wezel::Add(unsigned long int parent, unsigned long int ja)
{
unsigned long int i, j;
unsigned long stan[ja];
for(i = 0; i < ja; i++)
stan[i] = 0;
wezel temp;
wezel temp = this;
for (i = 0; i < ja; i++)
{
if (temp.wartosc != parent)
{
for (j = stan[i]; j < 100000; j++)
{
if (temp.dzieci[j] != NULL)
{
temp = temp.dzieci[j];
stan[i] = j;
break;
}
if (temp.dzieci[j] == NULL)
{
temp = temp.rodzic;
i--;
}
}
}
else
{
for (j = 0; j < 100000; j++)
{
if (temp.dzieci[j] == NULL)
{
temp.dzieci[j].wartosc = ja;
for (i = 0; i < 100000; i++)
temp.dzieci[j].dzieci[i] = NULL;
break;
}
}
}
}
}
bool wezel::Search(unsigned long int przodek, unsigned long int potomek, unsigned long int n)
{
unsigned long int i;
unsigned long int j;
unsigned long stan[n];
for(i = 0; i < n; i++)
stan[i] = 0;
wezel temp;
wezel temp = this;
for (i = 0; i < n; i++)
{
if (temp.wartosc != przodek)
{
for (j = stan[i]; j < 100000; j++)
{
if (temp.dzieci[j] != NULL)
{
temp = temp.dzieci[j];
stan[i] = j;
break;
}
if (temp.dzieci[j] == NULL)
{
temp = temp.rodzic;
i--;
}
}
}
else
{
for (j = 0; j < 100000; j++)
{
if (temp.dzieci[j] == potomek)
{
return true;
}
}
}
}
return false;
}