1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
| Eichhorn |
25.11.2011 15:48
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 50 Пол: Женский Реальное имя: Сафиуллина Алёна Репутация: 1 |
Язык СИ, пишу на dev cpp.
Задача: Реализовать программу, сохраняющую числа из входного файла в двоичном дереве. Имя файла приходит как аргумент командной строки. Числа необходимо хранить в сбалансированом дереве двоичного поиска. После построения дерева вывести его содержимое на экран в порядке возрастания. Пример: input.txt 48 1 0 29 Вывод: 0 1 29 48 Код #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> struct tree { int data; struct tree *left; struct tree *right; struct tree *pred; }; struct tree * create(int data) { struct tree *p = (struct tree*)calloc(1,sizeof(struct tree)); p->data=data; p->left=NULL; p->right=NULL; return p; } struct tree *add_tree(struct tree * head,int data) { struct tree *a = head; if(head==NULL){ head=create(data); return head; } while(1) { if(a->data < data) { if(!a->right) { a->right = create(data); break; } a = a->right; } else { if(!a->left) { a->left = create(data); break; } a = a->left; } } return head; } int depth_tree(struct tree *head) { if(head) { return 1 + depth_tree(head->left) + depth_tree(head->right); } return 0; } void print_tree(struct tree *tree) { if(tree==NULL){ return; } print_tree(tree->left); printf("%i\n",tree->data); print_tree(tree->right); } void balance_tree(){ } int main() { int n=0; int g=0; struct tree* head = NULL; FILE * f=fopen("file.txt","r"); if(f==0){ printf("%s","Fail ne otkrit\n"); return -1; } while(!feof(f)){ g=fscanf(f,"%d",&n); head = add_tree(head,n); if(g!=1){ printf("%s","fail pust\n"); return -1; } } print_tree(head); printf("depth is %i\n",depth_tree(head)); getch(); return 0; } Здесь просто вывод дерева. А как сделать балансировку? Сообщение отредактировано: Eichhorn - 25.11.2011 15:51 -------------------- Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
|
Eichhorn Двоичные деревья, СИ 25.11.2011 15:48
IUnknown Вот так: Идеально сбалансированное бинарное дерево 25.11.2011 18:48
Eichhorn Что-то никак не могу понять как это делается... По... 25.11.2011 19:51
IUnknown Так. Давай уточним: тебе надо это дело просто сбал... 25.11.2011 23:06
Гость Нам нужно бинарное дерево, чтобы в любой момент вы... 26.11.2011 5:15
IUnknown Значит, надо будет после каждого добавления элемен... 26.11.2011 11:54
Eichhorn У меня сейчас есть такой код:
#include <stdio... 26.11.2011 17:08
IUnknown Но это уже не совсем бинарные деревья. У тебя изме... 26.11.2011 17:30
Eichhorn Спасибо за ещё один вариант решения. Но, возвращая... 28.11.2011 17:31
IUnknown По определению - это конечно, хорошо, но... Смотри... 28.11.2011 18:56
Eichhorn Что-то я никак не могу придумать... В голову пришл... 29.11.2011 17:12
IUnknown А если сделать вот так:
if(a -> balanc... 29.11.2011 17:39
Eichhorn Спасибо! 3.12.2011 7:03![]() ![]() |
|
Текстовая версия | 26.10.2025 1:26 |