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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2012, 20:48   #1
sidestep
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 93
По умолчанию Деревья (проблема рекурсии)

Программа заполняет дерево по правилу: меньшее - идет налево, большее - направо

Функция, которая выводит наше дерево - вылетает, когда хочет перейти к правому, как обойти, чтобы была и проверка на конец рекурсии и переход на правый?

Вот код:

Код:
#include <stdio.h>
#include <conio.h>
struct Node
{
	int key;
	Node *right, *left;
};
typedef Node *PNode;
void PrintfLeftRootRight(PNode Tree)
{
	if (!Tree)
		return;

	PrintfLeftRootRight(Tree->left);
	printf ("%d ", Tree->key);
	PrintfLeftRootRight(Tree->right);
}
void Add(PNode &Head, int n)
{
	PNode current;
	current = new Node;
	//current->left = NULL;
	//current->right = NULL;
	PNode element = new Node ;

	current = Head;
	if (current->key > n && current->right)
	{
		current = current->right;
	}
	else 
		if (current->key > n && !current->right)
		{
			element->key = n;
			element->right = NULL;
			element->left = NULL;
			current->right = element;
			return;
		}
		else
			if (current->key < n && current->left)
			{
				current = current->left;
			}
			else
				if (current->key < n && !current->left)
				{
					element->key = n;
					element->right = NULL;
					element->left = NULL;
					current->left = element;
					return;
				}
}

int main()
{
	int NumberForHead;
	PNode Head;
	Head = new Node;
	printf ("Vvedite zna4enie dlya golovy\n");
	scanf ("%d", &NumberForHead);
	Head->key = NumberForHead;
	Head->left = NULL;
	Head->right = NULL;
	while (true)
	{
		printf ("Esli xotite vvesti eshe 1 4islo, to najmite 1, ina4e 0\n");
		int temp;
		scanf ("%d", &temp);
		if (temp == 1)
		{
			printf ("Vvedite plz 4islo: \n");
			int number;
			scanf ("%d", &number);
			Add (Head, number);
		}
		else break;
	}
	PrintfLeftRootRight(Head);




	
	getch();
	return 0;
}
sidestep вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рекурсии fre Паскаль, Turbo Pascal, PascalABC.NET 2 03.04.2012 09:59
Проблема с программой С++ метод Рекурсии! ivanchel Помощь студентам 6 06.06.2011 16:36
Проблема косвенной рекурсии Теркин Общие вопросы Delphi 1 31.05.2011 13:47
Рекурсии RAMA Паскаль, Turbo Pascal, PascalABC.NET 6 18.10.2009 13:56
Рекурсии Logan Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2008 08:52