【发布时间】:2016-07-31 23:29:09
【问题描述】:
我正在尝试将节点添加到我的 BST 树中,但使用递归添加节点的实际函数崩溃了,我不确定原因。我尝试将 root->left = 更改为 root = 并且递归进行了 6 次,就像它应该仍然没有输出我想要的一样。
我的示例输入是:顺便说一句(他们不是真人)
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;
}
【问题讨论】:
-
你想要什么输出,你会得到什么?
-
@ScottHunter 我正在尝试将节点添加到树中并最终打印树。
-
@ScottHunter 我实际上解决了这个问题,但我不确定这是一个更好的解决方案,就好像我的结构中有很多数据字段一样,这将是一件苦差事。
-
你实际上并没有回答我的问题:)。你不能只使用
*newNode = *temp,因为所有字段都直接在结构中吗?
标签: c recursion binary-search-tree