2017-11-14 3 views
-3

Ich versuche, eine BST in eine verknüpfte Liste zu konvertieren, aber es wird ein Fehler beim Versuch, die Liste zum Drucken auf dem Display aufzurufen.Konvertieren der binären Suchstruktur in Linked List-Fehler

Hier ist mein Code für die wichtigsten Funktionen,

ListNodePtr createListnode(int key) { 
    ListNodePtr newList = (ListNodePtr)malloc(sizeof(struct ListNode)); 

    if (newList != NULL) { 
      newList->key = key; 
      newList->next = NULL; 
      return newList; 
    } else { 
      return NULL; 
    } 
} 

ListNodePtr insertNodeIntoList(ListNodePtr root, const ListNodePtr z) { 
    if (root == NULL) { 
      root = createListnode(z->key); 
    } else { 
      root->next = insertNodeIntoList(root->next, z); 
    } 
    return root; 
} 

void linkedListINIT(ListNodePtr list, TreeNodePtr root) { 
    if (root != NULL) { 
      linkedListINIT(list, root->left); 
      ListNodePtr current = createListnode(root->key); 
      list = insertNodeIntoList(list, current); 
      linkedListINIT(list, root->right); 
    } 
    return; 
} 

ListNodePtr convertBSTtoLinkedList(TreeNodePtr root) { 
    ListNodePtr list = NULL; 

    linkedListINIT(list, root); 

    return list; 
} 

Hier wird die Initialisierung für die listNodePtr ist und die Druckfunktion.

struct ListNode { 
    int key; 
    struct ListNode *next; 
}; 

typedef struct ListNode *ListNodePtr; 

und

void printList(ListNodePtr head) { 
    if (head != NULL) { 
      printf("%d ", head->key); 
      printList(head->next); 
    } 
    return; 
} 

Das Problem ist, wenn ich versuche, die endgültige Liste zu drucken, gibt es keinen Ausgang, obwohl die ‚aktuellen‘ variable Ausgänge richtig, wenn ich es mit print-Anweisungen überprüfen. Ich bin nicht wirklich sicher, wo es schief geht, die Hauptfunktion ruft convertBSTtoLinkedList und printList auf. Jede Hilfe wäre willkommen!

+0

Im Funktionsaufruf 'linkedListINIT (list, root)' kann die Funktion 'linkedListINIT()' die Variable 'list' nicht modifizieren. Es ist egal, was es tut; Es kann einfach * die als Argumente übergebenen Variablen nicht modifizieren, da die C-Sprache streng nach dem Wert ist. – AlexP

Antwort

0

Im Funktionsaufruf linkedListINIT (list, root) kann die Funktion linkedListINIT() die Variable list nicht verändern. Es ist egal, wie es definiert ist; es einfach kann nicht möglicherweise die Variablen übergeben als Argumente, weil die C-Sprache ist streng pass-by-Wert.

Also ohne etwas mehr als die Definition von convertBSTtoLinkedList() zu lesen, weiß ich, dass es immer NULL zurückgibt.

+0

Also müssten Sie die Argumente Zeiger machen? Ich habe das probiert und bekomme immer einen Segmentierungsfehler. – Connor

0

Funktionen Ändern insertNodeIntoList() und linkedListINIT() als

ListNodePtr insertNodeIntoList(ListNodePtr root, int z) { 
    if (root == NULL) { 
      root = createListnode(z); 
    } else { 
      root->next = insertNodeIntoList(root->next, z); 
    } 
    return root; 
} 

void linkedListINIT(ListNodePtr list, TreeNodePtr root) { 
    if (root != NULL) { 
      linkedListINIT(list, root->left); 
      list = insertNodeIntoList(list, root->key); 
      linkedListINIT(list, root->right); 
    } 
    return; 
} 

Hoffe, dass es für Sie gearbeitet folgt!

Verwandte Themen