diff --git a/ex5/ex5.c b/ex5/ex5.c index 6aa5b1c7a0e5fa35181a0d07741f63f293327c14..6a319b80bb0f6ad8c9ce54e041d1fb247982b9ef 100644 --- a/ex5/ex5.c +++ b/ex5/ex5.c @@ -90,23 +90,29 @@ void transform(node *qt, int size, int indices[size]) { } } -void destroy(node *tree) { +void destroy(node *tree, int depth) { if (tree == NULL) { return; } - if (is_leaf(tree)) { - free(tree); - return; - } - for (int i = 0; i < 4; i++) { - destroy(tree->child[i]); + node *current = tree->child[i]; + for (int k = 0; k < depth; k++) { + if (is_leaf(current)) { + free(current); + } else { + current = tree->child[k]->child[i]; + } + } } + + free(tree); } int main() { int row = QUADTREE_SIZE; int col = QUADTREE_SIZE; + int depth = 4; + int parcours[2] = {3, 1}; int matrix[16][16] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 3, 3, 3, 3, 0, 0, 7, 7, 7, 7, 0, 0, 11, 11, 11}, @@ -125,8 +131,7 @@ int main() { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 3, 3, 3, 3, 0, 0, 7, 7, 7, 7, 0, 0, 11, 11, 11} }; - int parcours[2] = {3, 1}; - node* qTree = create_tree_from_matrix(row, col, matrix, 4); + node* qTree = create_tree_from_matrix(row, col, matrix, depth); transform(qTree, 3, parcours); for (int r = 0; r < row; r++) { @@ -136,5 +141,6 @@ int main() { printf("\n"); } + destroy(qTree, depth); return EXIT_SUCCESS; }