Programmierung binärer Baum preOrder Funktion

Bin ich zu schreiben versucht, eine rekursive Funktion zur Ausgabe der Werte in preorder. Jedoch für einige Grund, es hält den Druck aus die gleichen wie meine inOrder-Funktion. Die postOrder-Funktion funktioniert gut, aber ich hatte zu tun, die rekursive Funktion etwas anders für eine. Könnt Ihr einen Blick auf meinen code unten und lassen Sie mich wissen, was falsch ist? Ich Schätze es wirklich cuz diese wurde, gebe mir Mühe den GANZEN Tag. Vielen Dank im Voraus

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

#define TRUE 1
#define FALSE 0

typedef struct bnodestruct
{
    int value;
    struct bnodestruct *left;
    struct bnodestruct *right;
}bnode;

typedef bnode *bnodePtr;

void displayMenu();
void insert (bnodePtr *hd, int val);
void inOrder(bnodePtr hd);
void preOrder(bnodePtr hd);
void postOrder(bnodePtr hd);
void empty (bnodePtr *hd);

int main (int argc, char **argv)
{
    int val;
    bnodePtr head;
    head = NULL;    

    char option;
    int result = 0;
    while(1)
    {
    displayMenu();

    printf("Choose an option : ");
    scanf("\n%c", &option);

    /*printf("The option chosen is %c\n", option);*/

    switch (option)
    {

        case 'q':
            printf("The program is exiting...\n");
            exit(-1);
        case 'i': 
            printf("Enter an integer value to be inserted into the linked list : ");    
            scanf("%d", &val);  
            insert(&head, val);
            break;
        case 'o':
            inOrder(head);
            break;
        case 'n':
            preOrder(head);
            break;
        case 'p':
            postOrder(head);
            break;
        case 'e':
            empty(&head);
            /*inOrder (head);*/
            break;



    }

    }

}

void displayMenu()
{

    printf("\n          Menu          \n");
    printf("(q): quit the program\n");
    printf("(i): insert integer value into the binary tree\n");
    printf("(e): empty all values from the binary tree\n");
    printf("(o): list the items contained in the binary tree in order\n");
    printf("(n): list the items contained in the binary tree in pre order\n");
    printf("(p): list the items contained in the binary tree in post order\n");
}

void insert (bnodePtr *hd, int val)
{

    if (*hd == NULL)
    {
        *hd = (bnodePtr)malloc(sizeof(bnode));
        (*hd)->left = NULL;
        (*hd)->value = val;
        (*hd)->right = NULL;
    }
    else 
    {
        if (val < ((*hd)->value))
            insert (&((*hd)->left), val);
        else if (val > ((*hd)->value))
            insert (&((*hd)->right), val);
    }



}


void empty (bnodePtr *hd)
{

    bnodePtr temp1 = *hd;
    bnodePtr temp2;

    while (temp1 != NULL)
    {

        temp2 = temp1;
        temp1 = temp1->left;

        free (temp2);

    }

    *hd = NULL;

}


void inOrder (bnodePtr hd)
{

    if (hd != NULL)
    {


        inOrder(hd->left);
        printf("%d\n", hd->value);
        inOrder(hd->right);
    }



}

void preOrder (bnodePtr hd)
{

    if (hd != NULL)
    {


        printf("%d\n", hd->value);
        preOrder(hd->left);
        preOrder(hd->right);
    }


}

void postOrder (bnodePtr hd)
{

    if (hd != NULL)
    {


        inOrder(hd->left);
        inOrder(hd->right);
        printf("%d\n", hd->value);

    }



}
  • Interessant. Sieht okay für mich.
  • Du gepostet hast viel zu viel code. Ihr Ziel sollte es sein, erstellen Sie ein minimal-Beispiel-Programm, das zeigt Ihre problem-und das nicht nur, weil das ist höflich, um potenzielle Beantworter. Der Suche/Erstellung eines solchen Programms ist auch ein guter Weg, um einzugrenzen, wo das problem ist, im Falle es ist nicht das, was Sie denken. (Zum Beispiel, Ihre Verwendung scanf zu Lesen, in der ein einzelnes Zeichen ist ärger bringen.)
  • ok, aber neben der scanf Teil, sind u bieten keine Hilfe? der Grund, warum ich gebucht wurde der ganze code ist, weil es vielleicht ein Fehler an anderer Stelle im Programm, dass jemand, der in der Lage sein, zu erkennen, zu diagnostizieren das problem das ich habe mit der preOrder-Funktion. und auch jetzt finde ich auch mein postOrder-Funktion ist Durcheinander als auch
  • Nur für das Protokoll, ich bekomme verschiedene Ausgabe von preOrder und inOrder. Natürlich würden beide drucken die gleiche für einige degenerierte Bäume. Sind Sie vielleicht einfügen von Werten in aufsteigender Reihenfolge? Erzeugen würde solch einem degenerierten Baum.
InformationsquelleAutor Mike Smith | 2012-11-26
Schreibe einen Kommentar