CS DataStructure-Lecture 8 - Binary Search Tree Implementation
CS DataStructure-Lecture 8 - Binary Search Tree Implementation
left A right
while(cur){
pre=cur;
if(item < cur->info)
cur=cur->left;
else cur=cur->right;
}
if(item < pre->info) pre->left=p;
else pre->right=p;
}
}
Tree Implementation
int Delete(TreeType *t,EntryType k){
int found=0; NodeType *q=*t;
NodeType *r=NULL;
while(q && !(found=(k==q->info))){
r=q;
if(k < q->info) q=q->left;
else q=q->right;
}
if (found){
19
Tree Implementation
...
if (found){
if(!r)//Case of deleting the root
DeleteNode(t);
else if((k < r->info))
DeleteNode(& r->left);
else
DeleteNode(&r->right);
}
return found;
}
20
Tree Implementation
void DeleteNode(TreeType *pt){
NodeType *q=*pt; remember that pt refer to r->left
if(!(q)->left) *pt=(q)->right; or r->right
else
if(!(q)->right) *pt=(q)->left;
pt
else{ pt
20 q
…… q
} 15 29
free(q); pt 17 26 30
} q 16 28 39
27 21
... Tree Implementation
else{//third case
q=(q)->left; NodeType *r=Null;
while(q->right){
r=q; q=q->right; pt
} 20 q
(*pt)->info=q->info; 15 q 29
28
r
if(r)
17 26 30
r->right=q->left; q
else 28
28 39
(*pt)->left=q->left; 16 27
}
free(q);
22
}