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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2012, 08:41   #1
Tony_B
Новичок
Джуниор
 
Регистрация: 18.01.2012
Сообщений: 4
По умолчанию Бинарное дерево-сумма ключей.

Здравствуйте.Столкнулся с такой проблемой-дано дерево
Код:
                              5
                            /   \
                           4     8
                         /      /  \
                       11     13   4
                      /   \            \
                     7     2            1
Дано что "путь" идет от корня до любого узла без "детей"
например 5+4+11+7 один "путь"
5+8+13 второй "путь"
нужно написать псевдокод рекурсивного алгоритма в котором дано дерево и сумма-требуется чтобы алгоритм вернул "true" если есть путь в дереве равный данной сумме.Извините за некоторую сумбурность в обьяснении проблемы-мне немного сложно обьяснить на русском языке.Буду очень благодарен если теоретически поможете в том как подходить к решению этой проблемы.

Последний раз редактировалось Tony_B; 18.01.2012 в 17:30. Причина: Не успел нормально обьяснить суть проблемы.
Tony_B вне форума Ответить с цитированием
Старый 18.01.2012, 14:55   #2
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

ну на си как то так

Код:
	bool Find_Path (Tree_Node *Node,int sum_to_find,int Sum_now )
{
    bool Is_Path;
	Sum_now += Node.Node_Value;
    if (sum_to_find == Sum_now)   Is_Path = true;
		else {
			if (Node.Left_Son!=0)
				{
				    Is_Path =   Find_Path (Node.Left_Son, sum_to_find, sum_now);
				}
			if (Node.Right_Son!=0 &&  Is_Path != true)
				{
					Is_Path = Find_Path (Node.Right_Son, sum_to_find, sum_now);
				}
		}
	return Is_Path;
}

Find_Path (Root, 1111 , 0); // ну и поехали искать 1111
AlexDark вне форума Ответить с цитированием
Старый 18.01.2012, 17:27   #3
Tony_B
Новичок
Джуниор
 
Регистрация: 18.01.2012
Сообщений: 4
По умолчанию

Огромное спасибо за ответ.Но если например sum_to_find будет равно Node.Node_Value не дойдя до конца пути то функция вернет true?То есть
Find_Path (Root, 5 , 0)
вернет true хотя это будет ошибка..?
Tony_B вне форума Ответить с цитированием
Старый 18.01.2012, 18:30   #4
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

Ну в таком случае надо будет проверять есть ли еще дочерние узлы, вроде
if (sum_to_find == Sum_now && (Left==0 && Right ==0))
AlexDark вне форума Ответить с цитированием
Старый 18.01.2012, 18:53   #5
Tony_B
Новичок
Джуниор
 
Регистрация: 18.01.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от AlexDark Посмотреть сообщение
ну на си как то так

Код:
	bool Find_Path (Tree_Node *Node,int sum_to_find )
{
    bool Is_Path;
    Sum_to_find -= Node.Node_Value;
    if (sum_to_find == 0 && (Left== 0 && Right == 0))   Is_Path = true;
		else {
			if (Node.Left_Son!=0)
				{
				    Is_Path =   Find_Path (Node.Left_Son, sum_to_find);
				}
			if (Node.Right_Son!=0 &&  Is_Path != true)
				{
					Is_Path = Find_Path (Node.Right_Son, sum_to_find);
				}
		}
	return Is_Path;
}

Find_Path (Root, 1111); // ну и поехали искать 1111
если в условии дано что функция получает только дерево и некую сумму могу ли я исправить код так?
Tony_B вне форума Ответить с цитированием
Старый 18.01.2012, 19:31   #6
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

Да, гениально, так можно обойтись и одним параметром =)
AlexDark вне форума Ответить с цитированием
Старый 18.01.2012, 19:37   #7
Tony_B
Новичок
Джуниор
 
Регистрация: 18.01.2012
Сообщений: 4
По умолчанию

Ок,огромное спасибо!!!
Tony_B вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бинарное дерево NewNub Общие вопросы Delphi 1 05.12.2011 15:10
Бинарное дерево С++ Dfoer Фриланс 1 02.12.2011 12:49
Бинарное дерево Viktor19764 Помощь студентам 1 05.11.2011 23:21
Бинарное дерево lubafffka Общие вопросы C/C++ 0 29.04.2009 12:28
Бинарное дерево g0liath Помощь студентам 2 16.02.2008 23:54