diff --git a/A1/coord_query_kdtree b/A1/coord_query_kdtree index 9f2db6c..a2b0bc7 100755 Binary files a/A1/coord_query_kdtree and b/A1/coord_query_kdtree differ diff --git a/A1/coord_query_kdtree.c b/A1/coord_query_kdtree.c index fed49ef..1e5b9c5 100644 --- a/A1/coord_query_kdtree.c +++ b/A1/coord_query_kdtree.c @@ -35,9 +35,9 @@ struct node* kdtree(struct record* points, int depth, int n) { int axis = depth % 2; if (axis == 0) { - qsort(points, n, sizeof(struct record*), lon_comp_func); + qsort(points, n, sizeof(struct record), lon_comp_func); } else { - qsort(points, n, sizeof(struct record*), lat_comp_func); + qsort(points, n, sizeof(struct record), lat_comp_func); } struct record* median = &points[n / 2]; struct node* new_node = malloc(sizeof(struct node)); @@ -72,12 +72,13 @@ void free_kdtree(struct node* data) { struct node* left = data->left; struct node* right = data->right; + free(data); free_kdtree(left); free_kdtree(right); } -void lookup(struct record* closest, double closest_dist, double query[2], struct node* tree) { +void lookup(struct record** closest, double closest_dist, double query[2], struct node* tree) { if (tree == NULL) { return; } @@ -85,7 +86,7 @@ void lookup(struct record* closest, double closest_dist, double query[2], struct double compare_coord[2] = {tree->point[0], tree->point[1]}; double dist = calc_euclidean(query, compare_coord); if (dist < closest_dist) { - closest = tree->record; + closest = &tree->record; closest_dist = dist; } @@ -101,12 +102,12 @@ void lookup(struct record* closest, double closest_dist, double query[2], struct } const struct record* lookup_kdtree(struct node *data, double lon, double lat) { - struct record* closest = &(*data->record); + struct record* closest = data->record; double compare_coord[2] = {data->point[0], data->point[1]}; double query[2] = {lon, lat}; double closest_dist = calc_euclidean(query, compare_coord); - lookup(closest, closest_dist, query, data); + lookup(&closest, closest_dist, query, data); return closest; }