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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2013, 12:27   #1
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию Создать двоичное дерево поиска. Си

Последовательность чисел вводится с текстового файла.
Как построить для них бинарное дерево поиска?

Итог вывести в вот в таком виде:
(3, (2, (1, 0, 0), 0), (6, (4, 0, (5, 0, 0)), (8, (7, 0, 0), (9, 0, 0)))) (1*)

наглядно это выглядит так:

Код:
 
             3
           /   \
         2     6
        /     /   \
       1    4      8
              \     /\
               5  7  9
А в коде прописано объявление дерева в виде (1*)

Код:
struct btree 
{
char elem;  
struct btree *left;
struct btree *right;
};    

btree *build_tree()
{
	char sym;     
	btree *d;
    scanf ("%c", &sym); 
    switch (sym)
    {
	case '(': 
		{
			d = new btree;  
			scanf ("%c", &sym); 
			d->elem = sym;
			d->left = build_tree();
			d->right = build_tree(); 
			scanf("%c", &sym);  
			return  d;
		}
    case '0': return NULL;
    case ',': d=build_tree();
    case ')': continue;  
	break; 
    }           
    }
Yakoff вне форума Ответить с цитированием
Старый 12.06.2013, 12:46   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Вы строите бинарное дерево.... ???
Откуда new взялось в коде Си, это скорее C++...

Я как-то реализовывал двоичное дерево.... Очень давно

Код:
srand((unsigned)time(NULL));
for(i = 0; i < SIZE; i++)	{
	curr = (Tree*)malloc(sizeof(Tree));
	curr->data = rand()%10 + 1;
	curr->pleft = curr->pright = NULL;
	AddTree(&root, curr);}
....
......
.....
/* Функция инициализации дерева случайными числами */
void AddTree(Tree **root, Tree *curr)
{
	if(!(*root))	{	*root = curr;	return;	}
	if(curr->data < (*root)->data)
		AddTree(&(*root)->pleft, curr);
	else if(curr->data > (*root)->data)
		AddTree(&(*root)->pright, curr);

}
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 12.06.2013 в 12:53.
Bugrimov вне форума Ответить с цитированием
Старый 12.06.2013, 19:43   #3
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию

Да, соглашусь, но текст кода лучше бы был максимально приближен к Си.
Yakoff вне форума Ответить с цитированием
Старый 12.06.2013, 21:08   #4
Yakoff
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 21
По умолчанию

По первому посту отбой.
Задача состоит в следующем: написать подпрограмму, которая строит бинарное дерево поиска.
Yakoff вне форума Ответить с цитированием
Старый 12.06.2013, 21:45   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Мой код максимально приближен к Си, это откровенно говоря и есть Си.
Как раз функция AddTree и строит бинарное дерево, заполняя его случайными числами.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двоичное дерево поиска Anubys Общие вопросы C/C++ 1 03.10.2012 21:19
Двоичное дерево поиска SkyArcher C# (си шарп) 0 21.05.2011 20:05
Двоичное дерево поиска в С++ Madara88 C++ Builder 0 14.04.2011 09:33
Двоичное дерево поиска Madara88 Помощь студентам 0 14.04.2011 09:29
Двоичное дерево поиска структур lioshenka Общие вопросы C/C++ 3 15.08.2009 12:18