0% found this document useful (0 votes)
7 views5 pages

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
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views5 pages

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
We take content rights seriously. If you suspect this is your content, claim it here.
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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy