07 BST
07 BST
2
Binary Search Trees
3
Binary Search Tree (Example)
4
Binary Search Tree (Example)
• Is this a binary search tree?
5
Binary Search Tree (Example)
• Find 9
6
Binary Search Tree (Example)
• Find 12
7
Binary Search Tree (Example)
• Find 6
➔After 3 steps 6
is found
8
Binary Search Tree (Example)
• Find the smallest value
9
Binary Search Tree (Example)
• Find the largest value
10
Binary Search Tree (Example)
• Insert 9
11
Binary Search Tree (Example)
12
BST Tree Implementation
Void Insert(TreeType *t,EntryType item){
/*Recursion is not good here WHY??*/
NodeType*p=(NodeType*)
malloc(sizeof(NodeType));
p->info=item;
p->left=NULL; p->right=NULL;
if (!(*t)) *t= p;
else{
NodeType *pre,*cur;
cur=*t;
13
while(cur){
BST Tree Implementation
. . .
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;
}
14
}
Binary Search Tree (Example)
• Delete 10
15
Binary Search Tree (Example)
• Delete 14
16
Binary Search Tree (Example)
• Delete 8
7
17
Binary Search Tree (Example)
• Delete 8
1
0
18
Deleting from a Binary Search Tree
19
BST Tree Implementation
20
BST Tree Implementation
. . .
if (found){
if(!prev)//Case of deleting the root
DeleteNode(t);
else if((k< prev->info))
DeleteNode(&prev->left);
else
DeleteNode(&prev->right);
}
return found;
}
21
BST Tree Implementation
22
BST Tree Implementation
. . .
else{//third case
cur=(cur)->left; Node *prev=Null;
while(cur->right){
prev=cur; cur=cur->right;}
pt
(*pt)->info=cur->info;
20 c
if(prev)
prev->right=cur->left; 28
15
pc 29
else
(*pt)->left=cur->left; 17 26 30
} c
free(cur); 28
28 39
} 16 27 23