الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اين الخطأ في هذا البرنامج

مغلق
بدأه برق ورعد في 15 مايو 2006 · 1 رد · 344 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

#include <iostream.h>

struct bstree

{

int data;

bstree*left;

bstree*right;

};

bstree*root;

void creat()

{

bstree*root=NULL;

}

void insert(int element,bstree*&t)

{

if(t!=NULL)

{

if (t->data==element)

cout<<"error";

else

if(t->data<element)

insert(element,t->right);

else

insert (element,t->left);

}

else

t=new bstree;

t->data=element;

t->left=NULL;

t->right=NULL;

}

int find_min(bstree*&t)

{

if(t==NULL)

cout <<"tree is empty";

else

{

while(t->left!=NULL)

t=t->left;

return t->data;

}

}

bstree*find_element(int data,bstree*&t)

{

if(t->data==data)

return t;

else

{

if (t->data<data)

return find_element( data,t->right);

else

return find_element(data,t->left);

}

return NULL;

}

void remove (int data,bstree*&t)

{

if (t==NULL)

cout <<"tree is empty";

if (data<t->data)

remove(data,t->left);

else

if(data>t->data)

remove(data,t->right);

else

{

if (t->left!=NULL&&t->right!=NULL)

{ t->data=find_min(t->right);

remove(data,t->right);}

else

{

bstree*temp=t;

t=(t->left!=NULL)?t->left:t->right;

delete temp;

}

}

}

void postorder(bstree*t)

{

if (t!=NULL)

{

postorder(t->left);

postorder(t->right);

cout<<t->data;

}

}

void main()

{

creat();

int element;

int ch;

while(ch!=0)

{

cout <<"enter 1-insert 2-findmin 3find element 4remove 5print ";

cin>>ch;

if(ch==1)

{

cout<<"enter element";

cin>>element;

insert(element,root);

}

if (ch ==2)

find_min(root);

if(ch==3)

{

cout<<"enter element";

cin>>element;

find_element( element,root);

}

if (ch==4)

{cin>>element;

remove(element ,root);

}

if (ch==5)

{postorder(root);

}

}

}

#2

# أخى الرجاء إستعمال

 حتى يكون الكود مقروء.

# عند محاولة بناء هذا البرنامج الكومبيلر إدانى تحذيرين:

1. المتغير ch فى main لا يوجد به قيمة أوليه قبل إستخدامه فى مقارنة ال while لووب.

2. فى الدالة find_min ليست كل المسارات بترجع قيم, يعنى فى else بترجع قيمة و لكن فى if مش بترجع.

#عند إختيار find_element البرنامج يدخل فى infinite recursion كما أن الطباعة لا تتم بشكل صحيح, أنا لم أراجع الدوال مجرد أن جربت فقط لذلك أرجو منك مراجعة منطق الدوال اللى مكتوبة و التأكد أنها تعمل بشكل سليم.

هذا الموضوع مغلق.

مواضيع مشابهة