Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 21:29   #1
Vellosity
 
Регистрация: 17.04.2011
Сообщений: 9
Сообщение Построение дерева

Помогите пожалуйста найти ошибку. Компилятор пишет что всё ,,чисто,, но при попытке вывести дерево - вылетает

PHP код:
******************ЗАГОЛОВОЧНИК*****************

struct tree                                  

    
int data;                                
    
tree *lchild
    
tree*mchild;
    
tree*rchild;   
};

tree my_insert(tree *p,int nint 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 nint 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;
};

nodeGet_Elem(void);
int More (int*keyint*data);
nodeTree (node*korennode*elem);
void Print_Tree (nodekoren);
void Menu (nodekoren);

ФУНКЦИИ

#include "func.h"
#include <stdio.h>
#include <stdlib.h>


nodeGet_Elem(void)
{
    
nodeelem=(node*)malloc(sizeof(node));
    
printf ("Enter the key\n");
    
scanf ("%d", &elem->key);
    return 
elem;
}

int More (int keyint data)
{
    if (
key>data)
    {
        return 
1;
    }
    if (
key<data)
    {
        return 
0;
    }
}

nodeTree (node*korennode*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 (nodekoren)
{
    if (!
koren)
    {
        return;
    }
    
Print_Tree(koren->l);
    
printf("%d "koren->key);
    
Print_Tree(koren->r);
    return;
}


void Menu (nodekoren)
{
    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(korenGet_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);

Спасибо, если вы уделите мне немного времени..
Vellosity вне форума Ответить с цитированием
Старый 31.03.2012, 18:25   #2
zvoronz
Пользователь
 
Регистрация: 03.01.2011
Сообщений: 49
По умолчанию

Вот в эту строчку
Код:
temp->lchild = temp->rchild=NULL;
добавь ещё обнуление среднего листа дерева
Код:
temp->mchild = temp->lchild = temp->rchild = NULL;
zvoronz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение бинарного дерева LordAlex91 Общие вопросы C/C++ 2 18.02.2012 15:49
Построение фрактального дерева Manya8915 Общие вопросы по Java, Java SE, Kotlin 2 30.11.2011 23:01
построение бинарного дерева по инфиксной записи Екатерина Семенова Помощь студентам 1 23.05.2011 20:45
Построение дерева графа. Язык C Best1501 Общие вопросы C/C++ 2 11.12.2010 21:52
Построение дерева TzX Компоненты Delphi 2 20.07.2010 15:20