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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2013, 14:02   #1
Vasya94
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 55
По умолчанию Дерево на Си

При решении задачи использовать динамическую структуру бинарного дерева поиска.
Найти все елементы дерева ,что пренадлежат отрезку [a,b] ,где a ,b -данные числа.
Vasya94 вне форума Ответить с цитированием
Старый 05.11.2013, 14:14   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

В чем проблема? Есть ли наработки?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 05.11.2013, 19:58   #3
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

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

#ifndef NULL
#define NULL  ((void *)0)
#endif


typedef struct _bst_node {
    int n;
    struct _bst_node* left;
    struct _bst_node* right;
} bst_node;

bst_node* add_node(bst_node*, int);
void find_out(FILE*, const bst_node*, int, int);
void clear_tree(bst_node*);




int main(void){
    bst_node* tree = NULL;
    int i, a = 100,
           b = 230;

    for(i = 0; i < 60; i++)
         tree = add_node(tree, 50 + rand() % 400);

    find_out(stdout, tree, a, b);
    clear_tree(tree);
    return 0;
}




// добавление узла в дерево
bst_node* add_node(bst_node* tree, int n){
     if(tree == NULL) {
          tree = (bst_node*)malloc(sizeof(bst_node));
          if(tree == NULL)
                return tree;
          tree->n     = n;
          tree->left  = NULL;
          tree->right = NULL;
          return tree;
     }

     if(n < tree->n)
          tree->left  = add_node(tree->left, n);
     else
          tree->right = add_node(tree->right, n);
     return tree;
}



// поиск вхождений элементов в указанный отрезок
void  find_out(FILE* hout, const bst_node* tree, int a, int b){
     if(tree != NULL) {
          find_out(hout, tree->left, a, b);

          if(tree->n >= a && tree->n <= b)
                 fprintf(hout, "%d\n", tree->n);

          find_out(hout, tree->right, a, b);
     }
}



// чистка всего дерева
void  clear_tree(bst_node* tree) {
     if(tree != NULL) {
           clear_tree(tree->left);
           clear_tree(tree->right);
           free(tree);
     }
}
http://codepad.org/UKd0piv4
Nuklon вне форума Ответить с цитированием
Старый 08.11.2013, 01:09   #4
Vasya94
Пользователь
 
Регистрация: 20.04.2013
Сообщений: 55
По умолчанию

Спасибо огромное)
Vasya94 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дерево Dizelektwo Общие вопросы C/C++ 8 09.07.2012 10:44
Дерево Vladimer Помощь студентам 1 19.11.2010 07:12
Дерево на C# Andrey_k Помощь студентам 1 13.03.2010 22:06
Дерево Rifler Паскаль, Turbo Pascal, PascalABC.NET 1 06.05.2008 08:42
Дерево Yoger БД в Delphi 3 25.01.2007 01:24