Ich habe einen binären Strukturbaum. Die Struktur istBinärer Baum mit Strukturen (in C)
typedef struct hashtag {
char *name;
int acc;
} *Item;
Die Knoten werden von der Zeichenfolge organisiert. Ich möchte den Knoten drucken, der den höchsten acc hat, aber zuerst in alphabetischer Reihenfolge. Mein Code so weit:
Item search_max(link h) {
int max;
char *word;
Item hashtag = (Item)malloc(sizeof(struct hashtag));
Item left = (Item)malloc(sizeof(struct hashtag));
Item right = (Item)malloc(sizeof(struct hashtag));
hashtag = h->item;
max = h->item->acc;
word = h->item->name;
if (h == NULL)
return 0;
left = search_max(h->l);
if (max == left->acc && less(left->name, word))
word = left->name;
if (max < left->acc){
max = left->acc;
word = left->name;
}
right = search_max(h->r);
if (max == right->acc && less(right->name, word))
word = right->name;
if (max < right->acc){
max = right->acc;
word = right->name;
}
hashtag->acc = max;
hashtag->name = word;
return hashtag;
}
h ist der Kopf des Baumes und weniger ist
#define less(a,b) (strcmp(a,b) < 0)
und Link ist
typedef struct node{
Item item;
struct node *l;
struct node *r;
} *link;
Es hat einen Segmentierungsfehler gibt (core dumped). Zuvor habe ich den gleichen Code ausprobiert, ohne Speicher für Hashtag, links oder rechts, zuzuweisen (gleicher Fehler).
'Artikel Hashtag = (Item) malloc (sizeof (struct hashtag)); Item left = (Element) malloc (sizeof (struct hashtag)); Artikel rechts = (Artikel) malloc (sizeof (struct hashtag)); hashtag = h-> item; 'Sie verlieren Speicher hier. ** und **: 'Item search_max (link h) {' was ist * link *? – joop
@joop Ich habe meine Frage bearbeitet und jetzt habe ich auch den Linkcode. Wie kann ich das Problem des Speicherlecks beheben? Sorry für die Frage, aber ich bin neu in diesem –
Hinweis: Wenn Ihr Baum nach Element-> Name sortiert ist, ist die einzige Möglichkeit, das Element mit dem Max (Element-> ACC) zu finden, durch die Überprüfung ** aller ** Knoten - >> Gegenstände. (oder: indem man zuerst den Baum auf item-> acc umsortiert) (was du versuchst zu tun, BTW) – joop