2016-04-11 8 views
-1

Ich versuche, Knoten zu meinem BST-Baum hinzuzufügen, aber die eigentliche Funktion, die die Knoten mit Rekursion hinzufügt, stürzt ab und ich bin mir nicht sicher warum. Ich habe versucht, root->left = zu root = zu ändern und die Rekursion geht 6-mal wie es sollte immer noch nicht ausgibt, was ich will. meine Abtastwerteingang ist: btw (Sie sind keine echten Menschen)Funktion zum Hinzufügen von Knoten zu BST Absturz Programm

6 
121 Matt 205000 3000 3 2.0 2000 35 Blueberry Lane 
163 Amy 450000 5000 5 5.5 2016 8885 Winter Garden Drive 
116 Grant 375000 3000 3 2.0 2015 191 Oviedo Lakes 
100 Linda 355000 4000 4 2.5 2014 79 Bradmore Lane 
155 Amy 495000 3500 3 3.0 2012 52 Lenox Drive 
280 Grant 950000 5000 5 6.5 2016 223 Willow Pines 

Und hier ist mein Code:

#include <stdio.h> 
#include <stdlib.h> 
#define ADD_LENGTH 30 

typedef struct treeType{ 
    int listingId, price, propertySize; 
    int numOfBeds, yearBuilt; 
    double numOfBaths; 
    char agent[20]; 
    char address[ADD_LENGTH]; 
    struct treeType *left; 
    struct treeType *right;  
}bNode; 

bNode* addTreeNode(bNode *tree, bNode temp); 
void printTree(bNode *root); 
bNode* getNewNode(bNode *data); 



int main(void) 
{ 
    bNode *root = NULL; 
    int numOfProperties; 
    int i; 
    FILE *fp; 
    fp = fopen("library.txt","r"); 
    if(fp == NULL){ 
     printf("fopen failed\n"); 
    } 
    fscanf(fp, "%d", &numOfProperties); 
    printf("%d\n", numOfProperties); 
    bNode temp; 
    for(i = 0; i < numOfProperties; i++){ 
    fscanf(fp,"%d %s %d %d %d %lf %d %[^\n]s", &temp.listingId, temp.agent,&temp.price,&temp.propertySize,&temp.numOfBeds, 
      &temp.numOfBaths,&temp.yearBuilt,temp.address); 
    root = addTreeNode(root, temp); 
    } 
    printTree(root); 

    fclose(fp); 

    return 0; 
} 

bNode* getNewNode(bNode* temp){ 
    bNode* newNode = malloc(sizeof(bNode)); 
    newNode = temp; 
    newNode->left = NULL; 
    newNode->right = NULL; 
    return newNode; 

} 

bNode* addTreeNode(bNode *root,bNode temp){ 
    printf("Hey boisadd\n"); 
    if(root==NULL){ 
     printf("Only Once\n"); 
     root = getNewNode(&temp); 
    } 
    else if(temp.listingId < root->listingId){ 
     root = addTreeNode(root->left, temp); 
    } 
    else{ 
     root = addTreeNode(root->right, temp); 
    } 
    return root; 
    /* printf("%d %s %d %d %d %.1lf %d %s\n", (*tree)->node->listingId, (*tree)->node->agent, (*tree)->node->propertySize,(*tree)->node->price, (*tree)->node->numOfBeds, 
      (*tree)->node->numOfBaths, (*tree)->node->yearBuilt, (*tree)->node->address);*/ 
} 

EDIT: behobenes Problem durch

getNodeFunction Wechsel dort
bNode* getNewNode(bNode temp){ 
    bNode* newNode = malloc(sizeof(bNode)); 
    strcpy(newNode->address,temp.address); 
    newNode->listingId = temp.listingId; 
    newNode->price = temp.price; 
    newNode->numOfBaths = temp.numOfBaths; 
    newNode->numOfBeds = temp.numOfBeds; 
    newNode->propertySize = temp.propertySize; 
    newNode->yearBuilt = temp.yearBuilt; 
    strcpy(newNode->agent,temp.agent); 


    newNode->left = NULL; 
    newNode->right = NULL; 
    return newNode; 

} 
+0

Welche Ausgabe möchten Sie und was erhalten Sie stattdessen? –

+0

@ScottHunter Ich versuche, die Knoten zum Baum hinzuzufügen und schließlich den Baum zu drucken. – Jude

+0

@ScottHunter Ich habe das Problem tatsächlich behoben, aber ich bin mir nicht sicher, wie es eine bessere Lösung ist, als ob ich eine Menge Datenfelder in meiner Struktur hätte, wäre es eine lästige Pflicht. – Jude

Antwort

0

Vielleicht sind 2 Probleme. Zunächst wird der Knoten Zuweisungsoperation in Funktion getNewNode, die wie folgt sein sollte:

bNode* getNewNode(bNode* temp) { 
    bNode* newNode = (bNode*)malloc(sizeof(bNode)); 
    // newNode = temp; 

    newNode->listingId = temp->listingId; 
    newNode->numOfBaths = temp->numOfBaths; 
    newNode->numOfBeds = temp->numOfBeds; 
    strcpy(newNode->agent, temp->agent); 
    strcpy(newNode->address, temp->address); 
    newNode->price = temp->price; 
    newNode->propertySize = temp->propertySize; 
    newNode->yearBuilt = temp->yearBuilt; 

    newNode->left = NULL; 
    newNode->right = NULL; 
    return newNode; 
} 

Und das zweite Problem ist, wenn Sie Kind seiner Eltern hinzuzufügen, kehren Sie den untergeordneten Knoten, die Zuordnung zu Kind sollte nicht seine Mutter .

bNode* addTreeNode(bNode *root, bNode temp) { 
    printf("Hey boisadd\n"); 
    if (root == NULL) { 
     printf("Only Once\n"); 
     root = getNewNode(&temp); 
    } 
    else if (temp.listingId < root->listingId) { 
     root->left = addTreeNode(root->left, temp); 
    } 
    else { 
     root->right = addTreeNode(root->right, temp); 
    } 
    return root; 
    /* printf("%d %s %d %d %d %.1lf %d %s\n", (*tree)->node->listingId, (*tree)->node->agent, (*tree)->node->propertySize,(*tree)->node->price, (*tree)->node->numOfBeds, 
    (*tree)->node->numOfBaths, (*tree)->node->yearBuilt, (*tree)->node->address);*/ 
} 
Verwandte Themen