Помощь - Поиск - Пользователи - Календарь
Полная версия: Бинарное дерево > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
Matadora
будете смеяться, но я не могу сделать вроде простую и стандартную программу по строению бинарного дерева
в общем, условие такое:

Постройте дерево двоичного поиска для такого списка ключей: 6 17 21 35 46 51 59 66 78 83

я шарилась по сети и нашла одну программу которая по идее должна выводить дерево, вот ее код, НО ОНА ЭТОГО НЕ ДЕЛАЕТ! вредная Х_Х подскажите что в ней не так или дайте наводку на норм код

Код
#include<stdlib.h>
#include<stdio.h>

struct tree{
        char info;
        struct tree *left;
        struct tree *right;
       };

struct tree *root; //verhuna dereva pochatkova
struct tree *stree(struct tree *root, struct tree *r, char info);
void print_tree(struct tree *root, int l);

int main(void)
{
    char s[10];
    root=NULL;
    do
    {
        printf("Enter the sumbol: ");
        gets(s);
        root=stree(root, root, *s);
    }while(*s);
    print_tree(root, 0);
    return 0;
}

struct tree *stree(struct tree *root, struct tree *r, char info)
{
    if(!r)
    {
        r=(struct tree *) malloc(sizeof(struct tree));
        if(!r)
        {
            printf("ne vustachaye pamyati\n");
            exit(0);
        }
        r->left=NULL;
        r->right=NULL;
        r->info=info;
        if(!root) return r;
        if(info<root->info) root->left=r;
        else root->right=r;
        return r;
    }
    if(info<r->info) stree(r, r->left, info);
    else stree(r, r->right, info);
    return root;
}

void print_tree(struct tree *r, int l)
{
    int i;
    if(!r) return;
    print_tree(r->right, l+1);
    for(i=0; i;r->info);
    print_tree(r->left, l+1);
}



Vahappaday
Это дерево элементов типа char.
Надо переделать в Вашем случае под int.
Либо переделайте сами, либо чуть-чуть подождите - освобожусь немного и исправлю.
Хотя.... полезней было бы разобраться самостоятельно.
Чтение вместо gets сделать scanf'ом - он возвращает значение в зависимости от количества распознанных вхождений.
А дальше разница небольшая...
Единственное что, я бы сделал вывод покрасивее, с отступами.
Vahappaday
Код
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>

struct tree{
        int info;
        struct tree *left;
        struct tree *right;
       };

struct tree *root; //verhuna dereva pochatkova
struct tree *stree(struct tree *root, struct tree *r, int info);
void print_tree(struct tree *root, int l);

int main(void)
{
    int s;
    root=NULL;
    printf("Enter the sumbol: ");
    while(scanf("%d",&s))
    {
        printf("Enter the sumbol: ");
        root=stree(root, root, s);
    }
    print_tree(root, 0);
    getch();
    return 0;
}

struct tree *stree(struct tree *root, struct tree *r, int info)
{
    if(!r)
    {
        r=(struct tree *) malloc(sizeof(struct tree));
        if(!r)
        {
            printf("ne vustachaye pamyati\n");
            exit(0);
        }
        r->left=NULL;
        r->right=NULL;
        r->info=info;
        if(!root) return r;
        if(info<root->info) root->left=r;
        else root->right=r;
        return r;
    }
    if(info<r->info) stree(r, r->left, info);
    else stree(r, r->right, info);
    return root;
}

void print_tree(struct tree *r, int l)
{
    int i;
    if(!r) return;
    print_tree(r->right, l+1);
    for(i=0;i<l;i++) printf(" ");
    printf("%d\n", r->info);
    print_tree(r->left, l+1);
}

getch(); - щоб чекав у кінці натиснення клавіши.
компілював у студії, так що чи не скомпілиться - пиши.
tig81
Цитата(Vahappaday @ 25.9.2010, 22:52) *

getch(); - щоб чекав у кінці натиснення клавіши.
компілював у студії, так що чи не скомпілиться - пиши.

Липецкие программисты розуміють українську мову? bigwink.gif rolleyes.gif
Vahappaday
Чому б ні? Іноді практикую щоб не запам'ятати.
У мене просто родичи в Луцькі є))
tig81
Цитата(Vahappaday @ 26.9.2010, 10:51) *

щоб не запам'ятати.

щоб не забути.
Цитата
У мене просто родичи в Луцькі є))

Зрозуміло.
Vahappaday
ой... наоборот, правда :-[
Единственно что напрягает - это 4 раскладки...(( Пунто свитчер с ними не работает. У меня ещё канадская французская со значками
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.