我正在尝试从文件中的已排序数字创建二叉搜索树,但在创建之后,如果我尝试对树执行任何操作会导致分段错误。
typedef struct node_ {
int data;
struct node_ *left;
struct node_ *right;
} node;
int main(int argc,char* argv[]) {
//input error check
if (argc != 2) {
printf("Usage: %s <input file>\n", argv[0]);
return 0;
}
//opening file
FILE* file = fopen(argv[1], "r");
if (file == NULL) {
puts("error opening file");
return 0;
}
int temp = 0, num = 0, size = 0, i = 0;
//parsing through file to calculate size
while (!feof(file)) {
fscanf(file,"%d", &temp);
size++;
}
//going back to beginning of file
rewind(file);
//create array and scan numbers from file into array
int *array = malloc(size*sizeof(int));
for (i = 0; i < size; i++) {
fscanf(file,"%d", &array[i]);
}
fclose(file);
//checking array
for (i = 0; i < size; i++) {
printf("%d ", array[i]);
}
puts("");
//builds the balanced array
node* tree = build_balanced_tree(array, 0, size-1);
print(tree);
}
node* build_balanced_tree(int a[], int low, int high) {
//Base Case
if (low > high)
return NULL;
int mid = (high+low)/2;
node* root = malloc(sizeof(root));
root->data = a[mid];
root->left = build_balanced_tree(a, low, mid - 1);
root->right = build_balanced_tree(a, mid + 1, high);
return root;
}
程序在打印(树)时出现故障,但我知道这个功能正常。
感谢您的帮助。
答案 0 :(得分:1)
变化:
node* root = malloc(sizeof(root));
为:
node* root = malloc(sizeof(*root));
您目前正在做的是为结构分配指针的大小。