Skip to content
Snippets Groups Projects
Commit 7b2fa303 authored by florent.didion's avatar florent.didion
Browse files

delete ok

parent 008cbd88
No related branches found
No related tags found
No related merge requests found
No preview for this file type
......@@ -72,17 +72,38 @@ node_t *bst_insert(node_t *tree, int val){
}
bool bst_is_empty(node_t *tree){
return NULL==tree;
}
// efface le premier élément contenant la valeur val dans l'arbre
// et retourne l'arbre (ne fait rien si val est absente)
node_t *bst_delete(node_t *tree, int val){
if(val<tree->val){
bst_delete(tree->left, val);
}
else if(val>tree->val){
bst_delete(tree->right, val);
}
if(val==tree->val){
bst_destroy(tree);
if(!bst_is_empty(tree)){
if(val>tree->val){
tree->right=bst_delete(tree->right, val);
}
else if(val<tree->val){
tree->left =bst_delete(tree->left, val);
}
else if(tree->left!=NULL&&tree->right!=NULL){
node_t * next= bst_find_max_node(tree->right);
tree->val=next->val;
tree->right=bst_delete(next, next->val);
}
else{
node_t* tmp=tree;
if(tmp->left!=NULL){
tree=tree->left;
}
else if(tmp->right!=NULL){
tree=tree->right;
}
else{
tree=NULL;
}
free(tmp);
}
}
return tree;
}
......
......@@ -14,6 +14,7 @@ struct _node_t *right;
node_t *bst_create();
node_t *bst_create_node(int val);
void bst_destroy(node_t *tree);
bool bst_is_empty(node_t *tree);
void bst_print(node_t *tree, int prof);
node_t *bst_insert(node_t *tree, int val);
node_t *bst_delete(node_t *tree, int val);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment