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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2013, 23:21   #1
Леопольдовна
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 17
По умолчанию Бинарное дерево поиска

Построить бинарное дерево поиска из букв строки, вводимой пользователем. Разработать функцию, которая для заданной буквы определяет число узлов в правом и левом поддеревьях.

Вот моё решение, помогите исправить баги, в чём у меня ошибка(и)?
Код:
/* Структура, описывающая узел дерева */ 
typedef struct item 
{   
	int data;   
	item *left;   
	item *right; 
} Item; 

void AddNode(char data, Item **node); 
Item * TreeSearch(char data, Item **node);
void LeftOrder(Item *node);
int NNodeLeft(Item **node);
int NNodeRight(Item **node);

int _tmain(int argc, _TCHAR* argv[])
{
	char* string = "", a;
	Item *root = NULL, *temp = NULL;
	int kol = 0;

	printf("Input string\n");
	scanf("%s", &string);
	for(int i = 0; i < strlen(string); i++)
	{
		AddNode(string[i], &root);
	}
	printf("Please, enter litara\n");
	scanf("%c", &a);

	LeftOrder(root);

	temp = TreeSearch(a, &root);
	kol = NNodeLeft(&temp);
	printf("\nIn left order %d elements\n",  kol);
	kol = NNodeRight(&temp);
	printf("\nIn right order %d elements\n", kol);

	getchar();

	return 0;
}

/* Добавить узел в бинарное дерево поиска */ 
void AddNode(char data, Item **node) 
{   
	if (*node == NULL)
	{     
		*node = (Item *)calloc(1, sizeof(Item));     
		(*node)->data = data;     
		(*node)->left = (*node)->right = NULL;   
	} 
	else 
	{     
		if (data < (*node)->data)       
			AddNode(data, &(*node)->left); 
		else if (data > (*node)->data)       
				AddNode(data, &(*node)->right);     
			else       
				puts("There is such element in the tree");   
	} 
}

/* Поиск узла в бинарном дереве поиска */ 
Item * TreeSearch(char data, Item **node)
{

	if (*node == NULL || ((*node)->data == data))
		return *node; 
	else
	{
		*node++;
		if ((*node)->data > data)
			return TreeSearch(data, &(*node)->left);
		else 
			return TreeSearch(data, &(*node)->right);
	}
}

int NNodeLeft(Item **node)
{
	int k = 0;
	if (*node == NULL)
		return 0;
	while((*node) != NULL)
	{
		NNodeLeft(&(*node)->left);
		k++;
	}
	return k;
}

int NNodeRight(Item **node)
{
	int k = 0;
	if (*node == NULL)
		return 0;
	while((*node) != NULL)
	{
		NNodeRight(&(*node)->right);
		k++;
	}
	return k;
}

/* Обход дерева слева (вывод по возрастанию) */ 
void LeftOrder(Item *node) 
{
	if (node->left)
		LeftOrder(node->left);  
	printf("%c ", node->data);
	if (node->right)
		LeftOrder(node->right); 
}
Леопольдовна вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево поиска C++ Transcend Помощь студентам 2 01.04.2013 14:51
Бинарное дерево, проблема с функцией поиска rockfun Общие вопросы C/C++ 1 27.11.2012 10:26
Бинарное дерево поиска С++ vadiprog Помощь студентам 1 06.05.2012 21:47
Бинарное дерево поиска Orli Общие вопросы C/C++ 1 15.12.2011 21:27