PDA

View Full Version : سوال: سوال در مورد BST



jo0ojo0o_iut
یک شنبه 16 خرداد 1389, 00:35 صبح
سلام اگه می شه بگید اشکال این کد چیه و باید چه کاری انجام بدم؟ موقع اجرا error میده
اشکالش توی تابع insert هستش
ممنون می شم اگه زودتر جواب بدید!


struct node



{

int data;
node *l,*r;
};
class BST{
node *rishe,*t,*q;
int m;
public:

BST(){
m=0;
};
void insert(int );
bool search(node *,int );
int Depth();
int NoNodes();
};
void BST::insert(int n)
{
q=new node;
if(rishe==NULL)
{
rishe->data=n;
}
q->data=rishe->data;
q->l=rishe->l;
q->r=rishe->r;
t=new node;
t->l=t->r=NULL;
t->data=n;
if(rishe==NULL)
rishe=t;
else
{
while(q!=NULL)
{
if((t->data)>(q->data))
{
if(q->r!=NULL)
q=q->r;
else
{
q->r=t;
m++;
break;
}
}
else if(t->data<q->data)
{
if(q->l!=NULL)
q=q->l;
else
{
q->l=t;
m++;
break;
}
}
else
{
delete(t);
break;
}
}
}
};
void main()
{

BST b;
b.insert(20);


}

tdkhakpur
یک شنبه 16 خرداد 1389, 13:44 عصر
به گمانم insert را به شکل زیر بنویسید راحتتر باشد!


void BST::insert(int n)
{
node *tmp, *FindedNode;
FindedNode = tmp = rishe;
q=new node;
if(rishe==NULL)
q = rishe = new node;
else{
while( tmp!=NULL ){
FindedNode = tmp;
tmp = tmp->data>n ? tmp->r : tmp->l;
}
q = new node;
}
q->data = n;
FindedNode->r = FindedNode->l = NULL;
if( FindedNode->data>n )
FindedNode->r = q;
else
FindedNode->l = q;
}