0% found this document useful (0 votes)
2 views

BST ADT

The document contains a C++ implementation of a binary search tree (BST) with various functionalities such as insertion, traversal (inorder, preorder, postorder), searching for minimum and maximum values, and deletion of nodes. It defines a TreeNode structure and a Tree class that manages the nodes and provides methods for manipulating the tree. The main function includes a menu-driven interface for users to interact with the BST and perform operations.

Uploaded by

f2204048
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

BST ADT

The document contains a C++ implementation of a binary search tree (BST) with various functionalities such as insertion, traversal (inorder, preorder, postorder), searching for minimum and maximum values, and deletion of nodes. It defines a TreeNode structure and a Tree class that manages the nodes and provides methods for manipulating the tree. The main function includes a menu-driven interface for users to interact with the BST and perform operations.

Uploaded by

f2204048
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

#i

ncl
ude<i
ostr
eam>
#i
ncl
ude<cst
dli
b>

usi
ngnamespacest
d;

st
ructTreeNode{
i
ntdata;
Tr
eeNode*left;
Tr
eeNode*right;

Tr
eeNode(i
ntd){
data=d;
l
eft=null
ptr
;
ri
ght=null
ptr
;
}
}
;

cl
assTr ee{
pri
vate:
TreeNode*r
oot;
publi
c:
Tree(
){
r
oot=null
ptr
;
}

Tr
eeNode*get
Root
(){
r
etur
nroot;
}

v
oidinsert(
intval
,TreeNode* &node){
i
f( !
node){
node=newTr eeNode( val)
;
}elseif(val<node->data){
insert
(val
,node->l
eft);
}elseif(val>node->data){
insert
(val
,node->r
ight);
}else{
cout<<" Dupli
cati
onper for
med\
n";
}
}

v
oidinorder(TreeNode*node){
i
f( node==nul l
ptr
){
r
eturn;
}
i
nor der(
node- >l
eft)
;
cout<<node- >data<<""
;
i
nor der(
node- >ri
ght)
;
}

v
oidpreor
der(
TreeNode*node){
i
f(node==nul l
ptr
){
r
etur
n;
}
cout<<node->dat
a<<"";
pr
eor
der
(node-
>left)
;
pr
eor
der
(node-
>right)
;
}

v
oidpostorder(Tr
eeNode*node){
i
f(node==nul l
ptr
){
retur
n;
}
postorder(
node->l
eft)
;
postorder(
node->ri
ght)
;
cout<<node- >dat
a<<"" ;
}

Tr
eeNode*f ind(
intkey , TreeNode*node){
i
f(node==nul lptr){
cout<<" Val uenotf ound\n";
returnnullptr;
}
i
f(key<node- >dat a){
returnfi
nd( key ,node->l
eft)
;
}el
sei f(key>node- >data){
returnfi
nd( key ,node->r
ight)
;
}el
se{
cout<<" Val uef ound:"<<node-
>dat
a<<"
\n"
;
returnnode;
}
}

Tr
eeNode*findMin( Tr
eeNode*node){
i
f(node==nul lptr
){
returnnullptr
;
}
whil
e(node->left!=nul
lpt
r){
node=node- >lef
t;
}
r
eturnnode;
}

Tr
eeNode*findMax(TreeNode*node){
i
f(node==nullptr
){
returnnul
lptr
;
}
whil
e(node->r
ight!=null
ptr
){
node=node- >right
;
}
r
eturnnode;
}

v
oiddel
eteNode(intkey,
TreeNode*&node){
i
f(node==nul l
ptr){
retur
n;
}el
seif(key<node->data){
deleteNode(key,
node->l
eft)
;
}el
seif(key>node->data){
deleteNode(key,
node->r
ight)
;
}el
se{
if(
node- >l
ef t==nul l
ptr&&node- >ri
ght==null
ptr
){
deletenode;
node=nul l
ptr;
}elseif(node- >l
eft==nullptr
){
TreeNode*t emp=node;
node=node- >ri
ght;
deletet emp;
}elseif(node- >ri
ght==nul l
ptr){
TreeNode*t emp=node;
node=node- >l
eft;
deletet emp;
}else{
TreeNode*successor=f indMin(node-
>ri
ght)
;
node- >data=successor ->data;//dupl
i
cati
on
deleteNode( successor-
>dat a,node-
>ri
ght)
;
}
}
}
v
oidUpdat eTree(){
i
f(r
oot!=nul l
ptr){
TreeNode*n1=nul lpt
r;
Updat eTree(r
oot
,&n1);
root=n1;
}
}

v
oidUpdateTree(TreeNode*curr,Tr
eeNode*
*n1){
i
f(curr-
>lef
t!=nul l
ptr
)
UpdateTree(curr
->l
eft
,n1);

cur
r->l
eft=*n1;
i
f(*n1!=null
ptr
)
(*
n1)-
>ri
ght=cur
r;

*
n1=cur
r;

i
f(curr-
>ri
ght!
=null
ptr)
UpdateTr
ee(
curr
->ri
ght
,n1)
;
}
}
;

i
ntmain(
){
i
ntch,num;
Tr
eebst;
Tr
eeNode*root=bst
.get
Root
();
//Gett
her
ootpoi
nteronce

whi
le(t
rue){
cout<<"\n1.Insert
\n2.Inor
der
\n3.Pr
eor
der
\n4.Post
order
\n5.Fi
ndMi
n\n6.Fi
ndMax\
n7.
Sear
ch\
n8.Delet
e\n9.Exit\
n";
cout<<"Enteryourchoice:"
;
ci
n>>ch;

swi
tch(ch){
case1:
cout<<" Ent erel ementt obei nserted:";
ci
n>>num;
bst.i
nser t(num, r
oot )
;
cout<<" Element sinBSTar e:";
bst.i
nor der (
root )
;
break;
case2:
cout<<" Inor dert raversal:";
bst.i
nor der (
root )
;
break;
case3:
cout<<" Preor dert r
av ersal
:";
bst.pr eor der(root );
break;
case4:
cout<<" Post ordert r
av ersal
: "
;
bst.post order (root);
break;
case5:
cout<<" Mi nimum el ement :"
;
i
f( TreeNode*mi nNode=bst .fi
ndMi n(root)
){
cout<<mi nNode- >data<<endl ;
}else{
cout<<" Tr eei sempt y.
"<<endl ;
}
break;
case6:
cout<<" Maxi mum el ement :";
i
f( TreeNode*maxNode=bst .f
indMax( root)
){
cout<<maxNode- >data<<endl ;
}else{
cout<<" Tr eei sempt y.
"<<endl ;
}
break;
case7:
cout<<" Ent erel ementt obesear ched: ";
ci
n>>num;
bst.find( num, root );
break;
case8:
cout<<" Ent erel ementt obedel eted: "
;
ci
n>>num;
bst.del eteNode( num, r oot)
;
cout<<" Element sinBSTaf terdeletion:";
bst.i
nor der (
root )
;
break;
case9:
cout<<" Updat et ree:"
;
bst .Updat eTree( )
;
cout<<" Inor dertr aver
sal aft
erupdat e:";
bst .preor der (
root );
br eak;
case10:
exit(
0) ;
break;
def
aul
t:
cout<<"Ent
ert
hecor
rectchoi
ce.
"<<endl
;
break;
}
}
r
etur
n0;
}

You might also like