السلام عليكــم ورحمـة الله وبركاتــه
- #include <stdio.h>
- #include <stdlib.h>
- struct tnode
- {
- int data;
- struct tnode *right,*left;
- };
- typedef struct tnode *node;
- node creat_node(node N,int val);
- void preorder(node N);
- void postorder(node N);
- void inorder(node N);
- int main()
- {
- node root = NULL;
- int x;
- while(x!=0)
- {
- scanf("%d",&x);
- root = creat_node(root, x);
- }
- preorder(root);
- return 0;
- }
- node creat_node(node N,int val)
- {
- node tmp1,tmp2;
- /*
- التحقق من أول عقدة من أنها لاتحمل أي مؤشر لعقدة
- أخرى حتى تكون بمثابة رأس الشجرة
- */
- if(N==NULL)
- {
- N = (struct tnode*)malloc(sizeof(N));
- N->data = val;
- N->left = N->right = NULL;
- }
- else
- {
- tmp1 = N;
- while(tmp1!=NULL)
- {
- tmp2 = tmp1 ;
- /*
- جعل مؤشر لعقدة في جهة اليسار في حالة القيمة أصغر من القيمة الحالية
- */
- if(tmp1->data > val)
- tmp1 = tmp1->left;
- else
- tmp1 = tmp1->right;
- }
- /*
- إنشاء عقدة في جهة اليسار في حالة القيمة أصغر من القيمة الحالية
- */
- if(tmp2->data > val)
- {
- tmp2->left = (struct tnode*)malloc(sizeof(N));
- tmp2 = tmp2->left;
- tmp2->data = val;
- tmp2->right = tmp2->left = NULL ;
- }
- else
- {
- tmp2->right = (struct tnode*)malloc(sizeof(N));
- tmp2 = tmp2->right;
- tmp2->data = val;
- tmp2->right = tmp2->left = NULL;
- }
- }
- return (N);
- }
- void preorder(node N)
- {
- if(N!=NULL)
- {
- printf("%d ",N->data);
- preorder(N->left);
- preorder(N->right);
- }
- }
- /*
- void preorder(node N)
- void postorder(node N)
- void inorder(node N)
- */
المشكلة أن الترجمة تكون ناجحة و لكن البرنامج بعد أن أقوم بالإدخال فيه يغلق أوتوماتيكيا .