-1
私はBSTツリーにノードを追加しようとしていますが、再帰を使用してノードを追加する実際の関数はクラッシュしています。私はroot->left =
をroot =
に変更しようとしましたが、再帰は6倍になります。 私のサンプル入力は次のとおりです。ところで(彼らは本当の人ではありません)BSTクラッシュプログラムにノードを追加する機能
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
そして、ここに私のコードです:
#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:たぶんそこgetNodeFunction
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;
}
代わりに何を出力したいのですか? –
@ScottHunter私はツリーにノードを追加しようとしていて、最終的にツリーを印刷しようとしています。 – Jude
@ScottHunter私は実際に問題を修正しましたが、私は自分の体の中に多くのデータフィールドを持っているかのように、それがより良い解決策であるかどうかはわかりません。 – Jude