diff --git a/binary_tree b/binary_tree
index b20a14cebf260ed6d98be97767899674b6d70fd7..026db06d534c63be0792ab7fabd71f52e6397b0b 100755
Binary files a/binary_tree and b/binary_tree differ
diff --git a/binary_tree_lib.c b/binary_tree_lib.c
index b5e6e9c88428384c88ca6bb93b03882412e0d23d..dd0a337bbbfaf3d834ad0cba34b647f09fa0470a 100644
--- a/binary_tree_lib.c
+++ b/binary_tree_lib.c
@@ -17,16 +17,17 @@ node_t *bst_create_node(int val){
 }
 // détruit l'arbre et vide la mémoire
 void bst_destroy(node_t *tree){
-    if(tree->left==NULL&&tree->right==NULL){
-        free(tree);
-    }
-    else if(tree->left!=NULL){
+    if(tree==NULL){
+        return;
+    }    
+    if(tree->left!=NULL){
         bst_destroy(tree->left);
     }
-    else if(tree->right!=NULL){
+    if(tree->right!=NULL){
         bst_destroy(tree->right);
     }
-} 
+    free(tree);
+}
 
 // affiche l'arbre (voir plus bas)
 void bst_print(node_t *tree,int prof){
@@ -45,7 +46,7 @@ void bst_print(node_t *tree,int prof){
 // insertion de val dans l'arbre et retourne l'arbre (ou NULL si problème)
 node_t *bst_insert(node_t *tree, int val){
     if(tree==NULL){
-        tree=bst_create_node(val);        
+        tree=bst_create_node(val);
     }
     else if(val>tree->val){
         if(tree->right==NULL){
@@ -63,6 +64,9 @@ node_t *bst_insert(node_t *tree, int val){
             bst_insert(tree->left, val);
         }
     }
+    else{
+        return NULL;
+    }
        
     return tree;
     
@@ -131,11 +135,15 @@ bool bst_is_bst(node_t *tree){
 
 // retourne le noeud avec la valeur minimale de l'arbre (NULL s'il y a pas)
 node_t *bst_find_min_node(node_t *tree){
-    if(tree->left!=NULL){
-        bst_find_min_node(tree->left);
+    if(tree==NULL){
+        return NULL;
+    }
+    else if(tree->left!=NULL){
+        return bst_find_min_node(tree->left);    
+    }
+    else{
+        return tree;
     }
-    return tree;
-
 }
 
 // retourne la valeur la plus petite stockée dans l'arbre (ou MIN_INT)
@@ -145,10 +153,12 @@ int bst_find_min(node_t *tree){
 
 // retourne le noeud avec la valeur maximale de l'arbre (NULL s'il y a pas)
 node_t *bst_find_max_node(node_t *tree){
-    if(tree->right!=NULL){
-        bst_find_min_node(tree->right);
+    node_t* tree_out=tree;
+    if(tree->right!=NULL){   
+        tree_out=bst_find_max_node(tree->right);
+        
     }
-    return tree;
+    return tree_out;
 }
 
 // retourne la valeur la plus grande stockée dans l'arbre (ou MAX_INT)
diff --git a/main.c b/main.c
index 4d8ec4a3e9e296c2e9b93f4119709f797dc2f96d..11821cf9eb464560d42c3ae68d0ce873695afaea 100644
--- a/main.c
+++ b/main.c
@@ -15,7 +15,9 @@ int main(){
         
     }
     bst_print(tree, 0);
-    printf("printed \n\n");
+    printf("min value is :%d\n\n",(bst_find_min_node(tree))->val);
+    printf("max value is :%d\n\n",(bst_find_max_node(tree))->val);
+    //bst_print(tree, 0);
     bst_destroy(tree);