Регистрация: 17.04.2011
Сообщений: 9
|
Построение дерева
Помогите пожалуйста найти ошибку. Компилятор пишет что всё ,,чисто,, но при попытке вывести дерево - вылетает
PHP код:
******************ЗАГОЛОВОЧНИК*****************
struct tree
{
int data;
tree *lchild;
tree*mchild;
tree*rchild;
};
tree * my_insert(tree *p,int n, int dir);
void inorder(tree *p);
int Get_key(void);
void Menu (tree*root,tree *node_2,tree *node_3,tree *node_4,tree *node_5,tree *node_6,tree *node_7,tree *node_8,tree *node_9,tree *node_10,tree *node_11,tree *node_12,tree *node_13);
******************ФУНКЦИИ*******************
#include "func.h"
#include <stdio.h>
#include <stdlib.h>
tree * my_insert(tree *p,int n, int dir)
{
tree *temp = (tree *)malloc(sizeof(tree));
temp->data = n;
temp->lchild = temp->rchild=NULL;
if(p==NULL)
{
return temp;
}
else
{
if(dir ==0) // влево
{
p->lchild = temp;
return temp;
}
else if(dir ==1) // посередине
{
p->mchild = temp;
return temp;
}
else // вправо
{
p->rchild = temp;
return temp;
}
}
}
void inorder(tree *p)
{
if(p!=NULL)
{
inorder(p->lchild);
printf("%d ",p->data);
inorder(p->mchild);
inorder(p->rchild);
}
}
int Get_key(void)
{
int key;
printf ("Enter the key\n");
scanf ("%d", &key);
return key;
}
void Menu (tree*root,tree *node_2,tree *node_3,tree *node_4,tree *node_5,tree *node_6,tree *node_7,tree *node_8,tree *node_9,tree *node_10,tree *node_11,tree *node_12,tree *node_13)
{
for (;;)
{
printf ("\n4To cDeJIaTb: \n1. 3anoJIHuTb DepeBo\n2. Hane4aTaTb DepeBo\n3. Exit\n");
int k;
scanf ("%d", &k);
switch(k)
{
case 1:
root = 0;
root = my_insert(root,Get_key(),0);
node_2 = my_insert(root,Get_key(),0);
node_3 = my_insert(root,Get_key(),1);
node_4 = my_insert(root,Get_key(),2);
node_5 = my_insert(node_2,Get_key(),0);
node_6 = my_insert(node_2,Get_key(),1);
node_7 = my_insert(node_2,Get_key(),2);
node_8 = my_insert(node_3,Get_key(),0);
node_9 = my_insert(node_3,Get_key(),1);
node_10 = my_insert(node_3,Get_key(),2);
node_11 = my_insert(node_4,Get_key(),0);
node_12 = my_insert(node_4,Get_key(),1);
node_13 = my_insert(node_4,Get_key(),2);
break;
case 2:
inorder(root);
break;
case 3:
exit(1);
break;
}
}
return;
}
**************MAIN*************
#include "func.h"
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
tree*root=0;
tree*node_2=0;
tree*node_3=0;
tree*node_4=0;
tree*node_5=0;
tree*node_6=0;
tree*node_7=0;
tree*node_8=0;
tree*node_9=0;
tree*node_10=0;
tree*node_11=0;
tree*node_12=0;
tree*node_13=0;
Menu (root,node_2,node_3,node_4,node_5,node_6,node_7,node_8,node_9,node_10,node_11,node_12,node_13);
}
А для кода двоичного дерева нужна функция удаления узла. Не знаю как реализовать
PHP код:
ЗАГОЛОВОЧНИК
struct node
{
int key;
node*l;
node*r;
};
node* Get_Elem(void);
int More (int*key, int*data);
node* Tree (node*koren, node*elem);
void Print_Tree (node* koren);
void Menu (node* koren);
ФУНКЦИИ
#include "func.h"
#include <stdio.h>
#include <stdlib.h>
node* Get_Elem(void)
{
node* elem=(node*)malloc(sizeof(node));
printf ("Enter the key\n");
scanf ("%d", &elem->key);
return elem;
}
int More (int key, int data)
{
if (key>data)
{
return 1;
}
if (key<data)
{
return 0;
}
}
node* Tree (node*koren, node*elem)
{
if (koren==0)
{
koren=elem;
koren->l=0;
koren->r=0;
return (koren);
}
if (More(elem->key,koren->key))
{
koren->r=Tree(koren->r,elem);
}
if(!More(elem->key,koren->key))
{
koren->l=Tree(koren->l,elem);
}
return (koren);
}
void Print_Tree (node* koren)
{
if (!koren)
{
return;
}
Print_Tree(koren->l);
printf("%d ", koren->key);
Print_Tree(koren->r);
return;
}
void Menu (node* koren)
{
for (;;)
{
printf ("\nWhat do you want to do: \n1. Add elem to the tree\n2. Printf elem\n3. Exit\n");
int k;
scanf ("%d", &k);
switch(k)
{
case 1:
koren=Tree(koren, Get_Elem());
break;
case 2:
Print_Tree(koren);
break;
case 3:
exit(1);
break;
}
}
}
MAIN
#include "func.h"
void main(void)
{
node*koren=0;
Menu(koren);
}
Спасибо, если вы уделите мне немного времени..
|