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