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

الأشجار الثنائية

مغلق
بدأه رونق في 17 أبريل 2004 · 10 رد · 5,097 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

اخواني اتمنى المساعده اريد معلومات عن الأشجار الثنائية في لغة سي

#2

السلام عليكم ,,

الأشجار الثنائية هي عبارة عن فئة class اخترعها بعض المبرمجين لأنهم أحسو في لحظة معينة أن تصميما كهذا أو فئة كهذه الفئة ستكون مهمة جدا لاحقا وفي كثير من التطبيقات ,, وأحسو انها ستفيد في اختصار وقتهم ,, لذا فالغرض من ال data Structure الأصل فيها اختصار زمن المبرمج !!

باختصار هي عبارة عن بنية " كما تسمع عن المصطلح كثيرا :) " أو شكل عام لبيانات فقط ,,

طريقة لادخال البيانات بحيث تكون هذه البيانات لها علاقة ببعضها ,, بحيث يكون لأي عنصر في الشجرة أب وأبناء ,, حيث الأب هو العنصر الذي فوقه ويشير للابن ,, والابن نفسه سيكون أبا لعنصر أو عدة عناصر أخرى ,,

مالفائدة من تطبيق كهذا ؟ لماذا يعقد هؤلاء القوم هذه الأمور ولماذا لايكتبون برامج بصورة مباشرة ؟

حاليا أعمل على تطوير برنامج مشاركة ملفات Peer To Peer كالكازا لكن باذن الله سيكون خاصا بأعضاء Arabteam2000 فقط ,, فوصلت لنقطة في التحليل نحتاج فيها لاجراء عمليات البحث على كل الأجهزة المشاركة في البرنامج عن ملف معين أو كتاب معبن ,, كل هذا دون اللجوء للسيرفر نهائيا في عملية البحث ,, لكي لانزحم السيرفر بطلبات البحث الكبيرة التي ستأخذ الكثير من الوقت ,,

عموما اضطررنا في النهاية لتكوين شبكة شجرية من الأجهزة ,, تماما كالشجرة الثنائية ,, بحيث نستطيع رص الأجهزة " افتراضيا " على شكل شجرة ,, بحيث يستطيع أي جهاز اذا طلب عملية بحث في كل الاجهزة الأخرى ,, أن يستطيع أن يوصل هذه الرسالة لكل الأجهزة !! ويستلم الرد من الاجهزة فقط التي لديها الملف المطلوب كل هذا دون اللجوء للسيرفر مطلقا وبدون الاستعلام عن كل ال IP Address الموجودة في السيرفر ,,

تصميم عملية كهذه لم اكن أعرف كيف يمكن تطبيقها بدون البنية الشجرية كما في ال trees ,,

لذا فهؤلاء القوم يعرفون ماذا يفعلون جيدا !!

أرجو أن أكون قد أفدتك ,, وأردت الابتعاد بك عن جو التعريفات الروتيني ,, واذا أردت المزيد فاسأل ولايهمك :)

ربما يفيدك باقي الأعضاء بما لديهم هنا أيضا ,,

بالتوفيق ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

السلام عليكم ,,

خذ الرابط بدأ يأخذ منحى ال trees أيضا ربما يفيدك ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#4

بسم الله الرحمن الرحيم

تشكر أخوي HGB على هذه المعلومات

ولكني صراحة بحاجه لمعلومات أكثر وأريد التعريفات الروتينية وأتمنى المساعدة .

#5

السلام عليكم ,,

خذ بعض المعلومات الروتينية من الموقع التالي ,,

http://www.nist.gov/dads/HTML/tree.html

وخذ هذا الرابط الأساسي به كل ماتريد أن تعرفه عن ال data Structure والخوارزميات بشكل عام ,,

http://hissa.nist.gov/dads/

واتمنى أن يساعدك بقية الأعضاء ,,

وخذ الرابط في المنتدى بدأ يأخذ منحى ال Trees ,,

/index.php?showtopic=39852

تم تعديل هذه المشاركة بواسطة HGB في 18 أبريل 2004 في 11:39

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

السلام عليكم

مشكور مشرفنا على هذي المواقع لكن لو فيها تكليف مافي مواقع بالعربي

#7

هذا برنامج لل tree بالسي

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>

typedef int datatype;
typedef struct nodetree{
	char data;
	struct nodetree * left;
	struct nodetree * right;
}node,*tree;





/***********************/
void deletenode(tree *t,datatype info);
void create(tree*);
void add_data(tree *);
void insert_data(tree*,datatype);
void inorder(tree);
void preorder(tree t);
int size(tree t);
void display(tree t,int i);
tree findr(tree t , datatype data);
tree findi(tree t , datatype data);
tree min(tree t);
tree max(tree t);
int parint(tree t);
int pape(tree t);

void print_bst(tree);

void main()
{

	tree t,tr;
	create(&t);
	create(&tr);
    add_data(&t);
    

	printf("\nThe display of inorder is :\n");
	inorder(t);
	printf("\nThe display of preorder is :\n");
	preorder(t);
	int x=0;
	x=size(t);
	printf("\nThe size of the Tree is %d .\n",x);
	tr=findr(t,1);
	//tr=max(t);
     display(tr,5);

  
  printf("\n\n\n");
  
      printf("%d ",pape(t));

}
/**********************/
void create(tree *t)
{
	(*t)=NULL;
}
/**********************/
void add_data(tree *t)
{

  int i;datatype item;
	srand( time(NULL));
	for(i=0;i<7;i++){
    item=	rand()%10;
    printf("%d ",item);
    insert_data(t,item);
                                
    }
}
/*********************/
void insert_data(tree *t,datatype data)
{
	if( *t== NULL){
    (*t)=(node*)malloc(sizeof(node));
    (*t)->data=data;
    (*t)->left=NULL;
    (*t)->right=NULL;
	}

	else{
  if(  (*t)->data  > data )
  insert_data( &((*t)->left),data);
  else if(  (*t)->data  <= data )
   insert_data( &((*t)->right),data);
	}
}

/**************************/
void inorder(tree t)
{
	if(t!=NULL){
  inorder(t->left);    
  printf("%d  ",t->data);
  inorder(t->right);
	}
}
/**************************/
void preorder(tree t)
{
	if(t!=NULL){
  printf("%d  ",t->data);
  preorder(t->left);
  preorder(t->right);
	}
}
/*************************
int size(tree t)
{
	if(t==NULL)
  return 0;
	else return (1+size(t->left)+size(t->right));
}*/
/***********************/
int  size(tree t)
{
	static int x=0;
	if(t!=NULL){
  size(t->left);
  
 	 x++;
  size(t->right);
	}
	return x;

}
/*************************/
void display(tree t,int i)
{
	int g;
	if(t!=NULL){
  display(t->right,i+5);

  for(g=1;g<i;g++)
 	 printf(" ");

     printf("%d\n",t->data);

           display(t->left,i+5);

	}

}

/**************************/

tree findr(tree t , datatype data)
{
	tree temp;
	if( t == NULL)
  temp =NULL;
	else
	{
  if(t->data==data)
 	 temp =t;
  else if(t->data > data)
 	 temp= findr(t->left , data);
  else if(t->data < data)
 	 temp= findr(t->right , data);
	}
	return temp;
}

/*****************************************/
tree findi(tree t, datatype data)
{
	tree temp =t;
	while (temp != NULL  && temp ->data != data ){
       
  
  if(temp ->data >data)
 	 temp = temp ->left;

  else if	(temp ->data < data )
 	 temp = temp ->right;
	}
	return temp;
}
/*****************/
tree min(tree t)
{
	tree temp=t;
	if(temp!=NULL){
	while(temp->left!=NULL)
	{
  temp=temp->left;
	}
	}
  return temp;

}
/********************/
tree max(tree t)
{
	tree temp=t;
	if(temp!=NULL){
  while(temp->right!=NULL)
 	 temp=temp->right;
	}
	return temp;
}
/************************/
int parint(tree t)
{ 
	static int x=0;
	if(t!=NULL){
    parint(t->left);
    if(t->left !=NULL || t->right !=NULL)
     x++;
    parint(t->right);
	}
    return x;

}

/************************/
int pape(tree t)
{
	static int c=0;
	if(t!=NULL){
  pape(t->left);
  if(t->right==NULL && t->left==NULL)
 	 c++;
  pape(t->right);
	}
	return c;	
}


/**************************************/
#8

اذا كان في شي في البرنامج ماهو فهوم اطرحه!

وراح ارد عليك إن شاء الله

:)

#9

مشكور اخوي على هذا البرنامج لكني اريد معلومات مو برامج والف شكر لك

#10

السلام عليكم...

بصراحة مشرفنا جابها لك بشكل مبسط ورائع ولكن اشوفك مصر على معلومات اضافية.. سم ابشر ...بس ترا كل اللي ابقوله اضافه لكلام المشرف الغالي

الأشجار لها تطبيقات عديدة ولكن غالباً أكبر و أقوى تطبيق واللي يظهر فيه أثر استخدام بنية الشجرة عن استخدام أي بنية أخرى هو في عمليات البحث... بيحث أن البرنامج اللي يستخدم الأشجار في عملية البحث يكون أسرع وأكثر كفائة من البرامج التي تستخدم بنى أخرى... بمعنى آخر في بنية BST ( binary search tree ) يكون البحث فيها أسرع من البحث في binary tree وذلك لان طريقة ترتيب العناصر في دالة BST يؤدي الى الوصل الى الهدف المطلوب بأسرع من الوقت الذي سوف يستغرقه البرنانج للوصل الى الهدف في binary tree وغالباً تكون قيمة تكلفة البحث في BST هو O ( log n ) c في BT تكون تكلفة البحث هي O ( n)C أيضا تفيد الأشجار في استخدام طرق divide & conquer في طرق الوصول الى نتيجة بحث معينة والتي غالباً تكون أفضل من استخدام قاعدة او مجموعة كبيرة من البيانات المدرجة في أشجار..

أتمنى أكون قدمت شي مفيد....

تقبل تحياتي

#11

مشكور وانت ماقصرت ولا حتى مشرفنا

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

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