IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Бинарное дерево, помогите распечатать дерево!!!
Matadora
сообщение 25.9.2010, 14:47
Сообщение #1


Школьник
*

Группа: Продвинутые
Сообщений: 16
Регистрация: 4.9.2010
Город: Ukraine
Учебное заведение: ВНТУ
Вы: студент



будете смеяться, но я не могу сделать вроде простую и стандартную программу по строению бинарного дерева
в общем, условие такое:

Постройте дерево двоичного поиска для такого списка ключей: 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
сообщение 25.9.2010, 15:05
Сообщение #2


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



Это дерево элементов типа char.
Надо переделать в Вашем случае под int.
Либо переделайте сами, либо чуть-чуть подождите - освобожусь немного и исправлю.
Хотя.... полезней было бы разобраться самостоятельно.
Чтение вместо gets сделать scanf'ом - он возвращает значение в зависимости от количества распознанных вхождений.
А дальше разница небольшая...
Единственное что, я бы сделал вывод покрасивее, с отступами.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 25.9.2010, 19:52
Сообщение #3


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



Код
#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
сообщение 25.9.2010, 20:27
Сообщение #4


Академик
********

Группа: Преподаватели
Сообщений: 15 617
Регистрация: 15.12.2007
Город: Украина, Запорожье
Учебное заведение: ЗНУ
Вы: преподаватель



Цитата(Vahappaday @ 25.9.2010, 22:52) *

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

Липецкие программисты розуміють українську мову? (IMG:style_emoticons/default/bigwink.gif) (IMG:style_emoticons/default/rolleyes.gif)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 26.9.2010, 7:51
Сообщение #5


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



Чому б ні? Іноді практикую щоб не запам'ятати.
У мене просто родичи в Луцькі є))
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
tig81
сообщение 26.9.2010, 8:27
Сообщение #6


Академик
********

Группа: Преподаватели
Сообщений: 15 617
Регистрация: 15.12.2007
Город: Украина, Запорожье
Учебное заведение: ЗНУ
Вы: преподаватель



Цитата(Vahappaday @ 26.9.2010, 10:51) *

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

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

Зрозуміло.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 26.9.2010, 8:35
Сообщение #7


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



ой... наоборот, правда :-[
Единственно что напрягает - это 4 раскладки...(( Пунто свитчер с ними не работает. У меня ещё канадская французская со значками
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 19.4.2024, 20:59

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru