ПОМОЩ- С++ СПЕШНО ТЪРСЯ РЕШЕНИЕ !!!

AlexandeR40

Registered
Имам задача която трябва спешно да реша, но уви не мога. Моля да ми помогнете с решението :) Задачата е следната:
Да се състави функция за преобразуване на даден едносвързан списък в балансирано двоично дърво за търсене.
Дадени са ми функций, следните:

//Strukturata za spisuk
struct elemlist
{
int key;
elemlist *next;
} *start = NULL;

//Strukturata za durvo
struct elemtree
{
int key;
elemtree *left;
elemtree *right;
int bal;
} *root = NULL;

//Izvejdane na spisuka
void list()
{
if(start)
{
cout<<"\nList: ";
elemlist *p = start;
while(p)
{
cout<<p -> key<<" ";
p = p -> next;
}
}
else cout<<"\nEmpty List";
cout<<"\n\n";
system("pause");
system("cls");
}

//Dobavqne na element v spisuka otnachalo
void add_b(int n)
{
elemlist *p = start;
start = new elemlist;
start -> key = n;
start -> next = p;
}

//Dobavqne na element v spisuka otkraq
void add_e(int n)
{
elemlist *p = start, *q;
q = new elemlist;
q -> key = n;
q -> next = NULL;
if(start == NULL) start = q;
else
{
while(p -> next) p = p -> next;
p -> next = q;
}
}

//Za slagane na tabulatori pri izvejdane na durvoto
void printnode(int n, int h)
{
for(int i = 0; i < h; i++) cout<<"\t";
cout<<n<<endl;
}

//Za izvejdane na durvoto
void show(elemtree *t, int h)
{
if(t)
{
//cout<<t -> key;
show(t -> right,h+1);
printnode(t -> key,h);
show(t -> left,h+1);
}
}

//Za dobavqne na element v durvoto
void add(int n, elemtree *&t)
{
if(t == NULL)
{
t = new elemtree;
t -> key = n;
t -> bal = 0;
t -> left = t -> right = NULL;
}
else
{
if(t -> key > n)
{
if(t -> bal != -1) t -> bal--;
add(n,t -> left);
}
else
{
if(t -> key < n)
{
if(t -> bal != 1) t -> bal++;
add(n,t -> right);
}
}
}
}
 

Back
Горе