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;
 }