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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2012, 16:53   #11
Вечный_студент
Пользователь
 
Аватар для Вечный_студент
 
Регистрация: 11.11.2011
Сообщений: 45
По умолчанию

Цитата:
Сообщение от alezha Посмотреть сообщение
вроде так.
и для строк:
Код:
struct der
{
	char inf[];
	der *l,*r; // указатель на левое и правое поддерево
};

по идее еще надо их конвертировать в символы при выводе?
Изображения
Тип файла: jpg bhk.jpg (41.1 Кб, 33 просмотров)
Крепкая стена строится из маленьких кирпичей.
Но если положил первый кирпич криво, как ни старайся, стена кривой будет.
Вечный_студент вне форума Ответить с цитированием
Старый 27.05.2012, 16:55   #12
alezha
Форумчанин
 
Регистрация: 16.04.2011
Сообщений: 126
По умолчанию

Цитата:
Сообщение от Вечный_студент Посмотреть сообщение
по идее еще надо их конвертировать в символы при выводе?
Зачем?
Код:
printf("%s",dr->inf);
alezha вне форума Ответить с цитированием
Старый 27.05.2012, 17:04   #13
Вечный_студент
Пользователь
 
Аватар для Вечный_студент
 
Регистрация: 11.11.2011
Сообщений: 45
По умолчанию

дело в том, что она должна строить дерево либо по последовательности символов, либо по последовательности цифр. как это реализовать?
Крепкая стена строится из маленьких кирпичей.
Но если положил первый кирпич криво, как ни старайся, стена кривой будет.
Вечный_студент вне форума Ответить с цитированием
Старый 27.05.2012, 17:08   #14
alezha
Форумчанин
 
Регистрация: 16.04.2011
Сообщений: 126
По умолчанию

у Вас элементы дерева строки с символами или цифрами?
alezha вне форума Ответить с цитированием
Старый 27.05.2012, 17:10   #15
Вечный_студент
Пользователь
 
Аватар для Вечный_студент
 
Регистрация: 11.11.2011
Сообщений: 45
По умолчанию

одиночные символы алфавита (a b c d)
либо цифры. дерево должно и то и то считывать и уметь вывести.
Крепкая стена строится из маленьких кирпичей.
Но если положил первый кирпич криво, как ни старайся, стена кривой будет.
Вечный_студент вне форума Ответить с цитированием
Старый 27.05.2012, 17:23   #16
alezha
Форумчанин
 
Регистрация: 16.04.2011
Сообщений: 126
По умолчанию

Код:
struct der
{
	char inf;
	der *l,*r; // указатель на левое и правое поддерево
};
на сколько я помню операции ">", "<" применимы и к символам
alezha вне форума Ответить с цитированием
Старый 27.05.2012, 17:49   #17
Вечный_студент
Пользователь
 
Аватар для Вечный_студент
 
Регистрация: 11.11.2011
Сообщений: 45
По умолчанию

выше скрин кидал.
не хочет адекватно воспринимать символы. даже если
Код:
printf("%s",dr->inf);
и
Код:
struct der
{
	char inf;
	der *l,*r; // указатель на левое и правое поддерево
};
Крепкая стена строится из маленьких кирпичей.
Но если положил первый кирпич криво, как ни старайся, стена кривой будет.
Вечный_студент вне форума Ответить с цитированием
Старый 27.05.2012, 18:08   #18
alezha
Форумчанин
 
Регистрация: 16.04.2011
Сообщений: 126
По умолчанию

уверен Вы не изменили в функции добавления элемента вместо %d на %с и в функции создания дерева. а также в функции добавления элемента, для выхода.
Код:
if(st=='0') return; // выход в функцию main
alezha вне форума Ответить с цитированием
Старый 27.05.2012, 18:10   #19
Вечный_студент
Пользователь
 
Аватар для Вечный_студент
 
Регистрация: 11.11.2011
Сообщений: 45
По умолчанию

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


struct der
{
	char inf;
	der *l,*r; // указатель на левое и правое поддерево
};

void del(der **,int );
der *sozd(der *);
void add(der *);
void out_tree(der *, int );
void inorder(struct der *);

void main(void)
{
	setlocale(LC_ALL,"Russian");
	der *dr;
	dr=NULL; // адрес корня бинарного дерева
	system("cls");
	int st;
	do
	{
		while(1)
		{
			puts("vid operatsii : \n 1- sozdat derevo");
			puts(" 2- oboiti derevo v simmetrichno poryadke");
			puts(" 3- Vyvod v vide perevernutogo dereva");
			puts(" 4- dobavlenie elementov v derevo");
			puts(" 5- udalenie lyubogo elementa iz dereva");
			puts(" 6-exit");
			fflush(stdin);
			switch(getch())
			{
			case '1': dr=sozd(dr); break;
			case '2': inorder(dr); break;
			case '3': out_tree(dr,0); getch(); break;
			case '4': add(dr); break;
			case '5': 
				printf("\n Vvedite chislo dlya udaleniya");
	fflush(stdin);
	scanf("%d",&st);
	del(&dr,st);   break;
			case '6': return;
			}
			system("cls");
		}
		printf("povtor y/n");
		fflush(stdin);
	}
	while(getch()=='y');
}
der *sozd(der *dr)  // создание бинарного дерева
{
	if (dr)
	{
		puts("Binarnoe derevo uzhe sozdano");
		return (dr);
	}
	if (!(dr=(der*)calloc(1,sizeof(der))))
	{
		puts("Net svobodnoi pamyati");
		getch();
		return NULL;
	}
	puts("Vvedite informatsiyu v koren dereva");
	fflush(stdin);
	scanf("%d",&dr->inf);
	return dr;
}
void add(der *dr)  // функция добавления узлов в бинарное дерево
{
	der *dr1,*dr2;
	int k; // результат сравнения двух строк
	int ind, st;
	if (!dr)
	{
		puts("Net kornya dereva \n");
		getch();
		return;
	}
	do
	{
		puts("Vvedite informatsiyu v ocherednoi uzel dereva (0 - exit)");
		fflush(stdin);
		scanf("%d",&st);
		if(!st) return; // выход в функцию main
		dr1=dr;
		ind=0; // 1 - признак выхода из цикла поиска
		do
		{
			if(!(k=st-dr1->inf))
				ind=1; // для выхода из цикла do ... while
			else
			{
				if (k<0) // введ. строка < строки в анализируемом узле
				{
					if (dr1->l) dr1=dr1->l; // считываем новый узел дерева
					else ind=1; // выход из цикла do ... while
				}
				else // введ. строка > строки в анализируемом узле
				{ 
					if (dr1->r) 
						dr1=dr1->r; // считываем новый узел дерева
					else ind=1; // выход из цикла do ... while
				}
			}
		}
		while(ind==0);
		if (k) // не найден узел с аналогичной информацией
		{
			if (!(dr2=(struct der *) calloc(1,sizeof(struct der))))
			{
				puts("Net svobodnoi pamyati");
				return;
			}
			if (k<0) dr1->l=dr2; // ссылка в dr1 налево
			else dr1->r=dr2; // ............ направо
			dr2->inf=st; // заполнение нового узла dr2
		}
	}
	while(1); // любое условие т.к. выход из цикло по return
}
void del(der **dr,int st)  // функция удаления узла дерева
{
	if(!*dr)
	{
		printf("\n Derevo pustoe");
		return;
	}
	if(st<(*dr)->inf) del(&(*dr)->l,st);
	else if(st>(*dr)->inf) del(&(*dr)->r,st);
	else 
	{
		der *lt, *rt;
		lt=(*dr)->l;
		rt=(*dr)->r;
		free(*dr);
		*dr=rt;
		while(*dr)
			dr=&(*dr)->l;
		*dr=lt;
	}
}
void out_tree(der *dr1, int level) //функиця вывода дерева
{
	if(dr1)							//пока dr не равен нулю
	{
		out_tree(dr1->r,level+1);
		for(int i=0; i<level; i++)	//обозначение уровня
			printf("        ");
		printf("   ____\n");
		for(i=0; i<level; i++)
			printf("        ");
		printf("->| %s |\n",dr1->inf);
		for(i=0; i<level; i++)
			printf("        ");
		printf("  |____|\n");
		out_tree(dr1->l,level+1);

	}
	
}
void inorder(struct der *root)
{
  if(!root) return;
  inorder(root->l);
  if(root->inf) printf("%d", root->inf);
  inorder(root->r);
}
полный код
Крепкая стена строится из маленьких кирпичей.
Но если положил первый кирпич криво, как ни старайся, стена кривой будет.
Вечный_студент вне форума Ответить с цитированием
Старый 27.05.2012, 20:45   #20
Вечный_студент
Пользователь
 
Аватар для Вечный_студент
 
Регистрация: 11.11.2011
Сообщений: 45
По умолчанию

так что где изменить надо еще?((
Крепкая стена строится из маленьких кирпичей.
Но если положил первый кирпич криво, как ни старайся, стена кривой будет.
Вечный_студент вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бинарное дерево NewNub Общие вопросы Delphi 1 05.12.2011 15:10
Бинарное дерево С++ Dfoer Фриланс 1 02.12.2011 12:49
бинарное дерево Lucefer2007 Общие вопросы C/C++ 0 17.04.2011 14:31
бинарное дерево С++ mego4el Помощь студентам 0 15.03.2011 20:47
Бинарное дерево lubafffka Общие вопросы C/C++ 0 29.04.2009 12:28