我试图将节点添加到我的BST树中,但是使用递归添加节点的实际功能正在崩溃,我不确定原因。我尝试将root->left =
更改为root =
,递归次数为6次,因为它仍然不能输出我想要的内容。
我的样本输入是:btw(他们不是真人)
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);*/
}
编辑:通过更改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;
}
答案 0 :(得分:0)
也许有2个问题。首先是函数getNewNode中的节点赋值操作,它应该是这样的:
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;
}
第二个问题是当你将child添加到其父级时,你将返回子节点,该子节点应该分配给子节点而不是它的父节点。
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);*/
}