【发布时间】:2016-07-31 16:58:39
【问题描述】:
我知道要通过 BST,您需要递归执行。就像一直向左移动然后返回轨道然后一直向右移动。我正在尝试添加一个节点,但语法让我感到困惑,因为我知道 addTreeNode 需要一个双指针,但是当我在递归调用它然后说“节点”不是结构或联合的一部分。我只是对如何管理这些结构有点困惑。
#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;
typedef struct treeFrame{
bNode *node;
}bTree;
void init(bTree **tree);
void addTreeNode(bTree **tree, bNode *temp);
int main(void)
{
bTree *tree;
int numOfProperties;
int i;
init(&tree);
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);
addTreeNode(&tree, &temp);
//}
fclose(fp);
return 0;
}
void init(bTree **tree){
*tree = malloc(sizeof(bTree));
(*tree)->node= NULL;
}
void addTreeNode(bTree **tree,bNode *temp){
if((*tree)->node == NULL){
(*tree)->node = temp;
(*tree)->node->left = NULL;
(*tree)->node->right = NULL;
}
else if(temp->listingId < (*tree)->node->listingId){
addTreeNode((*tree)->node->left,temp);
}
/* 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);*/
}
【问题讨论】:
标签: c pointers recursion binary-search-tree