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 dortbNode* 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;
}
Welche Ausgabe möchten Sie und was erhalten Sie stattdessen? –
@ScottHunter Ich versuche, die Knoten zum Baum hinzuzufügen und schließlich den Baum zu drucken. – Jude
@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