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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2015, 12:55   #1
Sterben
Форумчанин
 
Аватар для Sterben
 
Регистрация: 01.03.2015
Сообщений: 118
По умолчанию

Здравствуйте,нужно написать код который будет создавать дерево
например:
1)Головы нет,1 веденное число присваивается Head,а все остальные по условию если > то влево, если < то в право, если = то центр.
Подскажите литературу или примеры с объяснениями.

Код:
#include <stdio.h>
#include <stdlib.h>
struct node {
char info;
struct node *right;
struct node *left;
struct node *middle;
};
struct node *head;
struct node *insert(struct node head,struct node *input,char info){
    if(!input){
        input = (struct node *)malloc(sizeof(struct node));
input->right = NULL;
input->left = NULL;
input->middle = NULL;
input->info = info;
if(!head)return input;
if(info<head->input)head->left = input;
if(info>head->input)head->right = input;
if(info == head->input)head->middle = input;
return input;
}
if(input < head->info)
    head ->left = info;else
    head ->right = info;
    if else (input == head->info)
         head -> middle = info;
                  return head;
}
У меня что то такое получилось

Последний раз редактировалось Stilet; 03.06.2015 в 11:12.
Sterben вне форума Ответить с цитированием
Старый 02.06.2015, 13:05   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Возьмите любую книжку с названием типа - алгоритмы и структуры данных. Есть классика Вирта, если вас не смущает, что там не С. а объяснения.
p51x вне форума Ответить с цитированием
Старый 02.06.2015, 22:08   #3
Sterben
Форумчанин
 
Аватар для Sterben
 
Регистрация: 01.03.2015
Сообщений: 118
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct node {
struct node *left;
struct node *right;
struct node *middle;
int info;};
//функция обхода
void show (node *&tree)
{
    if(tree != NULL)
    {
        show(tree->left);
        printf("%d",tree->info);
        show(tree->right);

    }
}
//Создание корня дерева;
void add_node (int info,node *&Mytree)
{
    if(NULL == Mytree)
    {
        Mytree = (struct node*)malloc(sizeof(struct node));
        Mytree ->info = info;
        Mytree ->left =  NULL;
        Mytree -> right = NULL;
        Mytree -> middle = NULL;

    }
    if(info<Mytree->info)
    {
        if(Mytree->left!=NULL)add_node(info,Mytree->left);
        else
        {
            Mytree ->left = (struct node*)malloc(sizeof(struct node));
            Mytree ->left->left = NULL;
            Mytree ->left ->right = NULL;
            Mytree->left->info=info;
        }
    }
    if(info>Mytree->info)
    {
        if(Mytree->right!=NULL)add_node(info,Mytree->right);
            else
        {
            Mytree ->right = (struct node*)malloc(sizeof(struct node));
            Mytree ->right->left = NULL;
            Mytree ->right->right = NULL;
            Mytree->right->info = info;
        }
    }
    if(info == Mytree->info)
    {
        if(Mytree->middle!=NULL)add_node(info,Mytree->middle);
        else
        {
            Mytree -> middle = (struct node*)malloc(sizeof(struct node));
            Mytree -> middle ->middle = NULL;
            Mytree ->middle->info = info;
        }
    }
}
//функция  добавления

int main(){
    int i,n,e;
    printf("input how many elements you want write: ");
    scanf("%d",&n);
struct node *tree = NULL;
for(i = 0;i<n;i++)
{
    printf("input number: ");
    scanf("%d",&e);
    add_node(e,tree);
}
show(tree);
getch();
return 0;
как вывести середину ?

Последний раз редактировалось Sterben; 02.06.2015 в 23:14.
Sterben вне форума Ответить с цитированием
Старый 03.06.2015, 11:03   #4
Sterben
Форумчанин
 
Аватар для Sterben
 
Регистрация: 01.03.2015
Сообщений: 118
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct node {
struct node *left;
struct node *right;
struct node *middle;
int info;};
//функция обхода
void show (node *&tree)
{
    if(tree != NULL)
    {
        show(tree->left);
        printf("%d",tree->info);show(tree->middle);
        show(tree->right);

    }
}
//функция Создание корня дерева;
void add_node (int info,node *&Mytree)
{
    if(NULL == Mytree)
    {
        Mytree = (struct node*)malloc(sizeof(struct node));
        Mytree ->info = info;
        Mytree ->left =  NULL;
        Mytree -> right = NULL;
        Mytree -> middle = NULL;

    }
    if(info<Mytree->info)
    {
        if(Mytree->left!=NULL)add_node(info,Mytree->left);
        else
        {
            Mytree ->left = (struct node*)malloc(sizeof(struct node));
            Mytree ->left->left = NULL;
            Mytree ->left ->right = NULL;
            Mytree ->left->middle= NULL;
            Mytree->left->info=info;
        }
    }
    if(info>Mytree->info)
    {
        if(Mytree->right!=NULL)add_node(info,Mytree->right);
            else
        {
            Mytree ->right = (struct node*)malloc(sizeof(struct node));
            Mytree ->right->left = NULL;
            Mytree ->right->right = NULL;
            Mytree ->right->middle = NULL;
            Mytree->right->info = info;
        }
    }
    if(info == Mytree->info)
    {
        if(Mytree->middle!=NULL)add_node(info,Mytree->middle);
        else
        {
            Mytree -> middle = (struct node*)malloc(sizeof(struct node));
            Mytree -> middle ->middle = NULL;
            Mytree ->middle ->right = NULL;
            Mytree -> middle ->left = NULL;
            Mytree ->middle->info = info;
        }
    }
}
//функция  добавления
/*void insert(int info,node *&Mytree)

{
    if (info>Mytree->info)insert(info,&Mytree->right);
    else insert (info,&Mytree->left);
}*/
int main(){
    int i,n,e;
    printf("input how many elements you want write: ");
    scanf("%d",&n);
struct node *tree = NULL;
for(i = 0;i<n;i++)
{
    printf("input number: ");
    scanf("%d",&e);
    add_node(e,tree);
}
show(tree);
getch();
return 0;
}
Выводит лишнее повторение.
Sterben вне форума Ответить с цитированием
Старый 03.06.2015, 18:34   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Вот промерно про алгоритмы и структуры данных, может пригодится кому)))
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двоичный код artiom4356 Помощь студентам 2 31.03.2014 18:53
создать список л3 из элементов входящих и в список л1 и в список л2 goosha_gio C++ Builder 1 27.06.2013 22:22
дерево ну или список "вставка" Madmaxisss Паскаль, Turbo Pascal, PascalABC.NET 3 01.09.2012 10:32
Список-дерево Oldgy Паскаль, Turbo Pascal, PascalABC.NET 1 08.05.2011 10:46
Стек,очередь,список и дерево. Lerika21 Помощь студентам 0 22.05.2010 19:31