Dobrý den, potřebovala bych pomoc.
Dostala jsem za úkol naprogramovat binární strom, kterému předáme pole jmen, tyto jména do toho binárního stromu postupně vložíme, nakonec vypíšeme jeho výšku.
Kód mi vyhazuje chybu u funkce Novy Prvek konkrétně se tomu nelíbí to x.
Moc prosím o radu co je špatně.
Předem děkuji.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct prvek
{
char hodnota[50]; //chceme do hodnoty uložit řetězec
struct prvek *left;
struct prvek *right;
};
const char *Jmena[]=
{ "Marie","Jan","Jana","Petr","Josef","Pavel","Jaroslav","Martin","Miroslav","Eva",
"Anna","Hana","Karel","Lenka","Milan","Michal","Alena","Petra","Lucie","Jaroslava",
"Ludmila","Helena","David","Ladislav","Jitka","Martina","Jakub","Veronika","Jarmila","Stanislav",
"Michaela","Ivana","Roman","Monika","Tereza","Zuzana","Radek","Vlasta","Marcela","Marek",
"Dagmar","Dana","Daniel","Marta","Irena","Miroslava","Barbora","Pavla","Miloslav","Olga",
"Andrea","Iveta","Filip","Blanka","Milada","Ivan","Zdenka","Libor","Renata","Rudolf",
"Vlastimil","Nikola","Gabriela","Adam","Radka","Simona","Milena","Miloslava","Iva","Daniela",
"Patrik","Bohumil","Denisa","Robert","Romana","Aneta","Ilona","Dominik","Stanislava","Emilie",
"Radim","Richard","Kamila","Ivo","Rostislav","Vladislav","Bohuslav","Alois","Vit","Kamil",
"Jozef","Vendula","Bohumila","Viktor","Emil","Michael","Ladislava","Magdalena","Eduard","Dominika",
"Marcel","Sabina","Julie","Antonie","Alice","Peter","Dalibor","Kristina","Otakar","Karla",
"Hedvika","Alexandra","Silvie","Erika","Nela","Vratislav","Nikol","Leona","Jolana","Margita",
"Bohuslava","Radovan","Josefa","Terezie","Marian","Linda","Igor" };
const unsigned Pocet=sizeof(Jmena)/sizeof(*Jmena);
//binární vyhledávací strom, pro ukládání jmen
struct prvek* NovyPrvek(char x[]) {
struct prvek *u;
u->hodnota = x; //ukládáme řetězec
u->left = NULL;
u->right = NULL;
return u;
}
struct prvek Insert(struct prvek *root, char x[]) {
struct prvek *u;
int cyklus;
if (root == 0) {
root = NovyPrvek(x);
return *root;
}
u = root;
while (cyklus != 1) {
if (x < u->hodnota) {
if (u->left == 0) {
u->left = NovyPrvek(x);
cyklus = 1;
}
u = u->left;
}
else {
if (x > u->hodnota) {
if (u->right == 0) {
u->right = NovyPrvek(x);
cyklus = 1;
}
u = u->right;
}
else {
cyklus = 0;
}
}
}
}
void InorderWalk(struct prvek *x) {
if (x != NULL) {
InorderWalk(x->left);
printf("%c ", x->hodnota);
InorderWalk(x->right);
}
}
void main() {
struct prvek *koren = NULL;
int i;
for (i = 0; i < Pocet; i++) {
Insert(koren,Jmena[i]);
}
}
//vložit jména z pole Jmena do stromu
//vypsat jména uložená ve stromu funkci InorderWalk(x)
/*
InorderWalk(x)
if x!= nil
InorderWalk(x.left)
print x.data
InorderWalk (x.right)
*/
//Zjistete a vypiste vysku sestavenoho vyhled stromu se jmeny