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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2010, 18:15   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию сумма бинарного дерева

Добрый вечер, нужно было написать реализацию вычислений суммы бинарного дерева использую многопоточность ВОт что я написала
Код:
#include "stdafx.h"
#include <iostream>
#include "windows.h"


/*=============================================================================================================
													описание данных
==============================================================================================================*/
	int sum = 0;	//накапливает сумму

	struct node		//узел дерева 
	{
		int inf;
		node *left;
		node *right;
	};
	node *mtx[2];

void insert_node(node * &root, int x) //процедура вставки узла(корень, значение инф поля)
{	
	if (root == NULL) 
	{
		root = new node;
		root->inf = x;
		root->left = NULL;
		root->right = NULL;
	}
	else if (x < root->inf)  insert_node(root->left, x);
	else insert_node(root->right, x); 
}

void search(node *root) //процедура печати дерева(корень)
{	
	if (root != NULL) 
	{
		std::cout << root->inf << " ";
		search(root->left);
		search(root->right);
	}
}

DWORD WINAPI summ(void *data)
{	
	node * pd = (node*)data;
//	node d=*pd;

	if (pd!= NULL) 
	{
		sum += pd->inf;
		if (pd->left!=NULL) summ(pd->left);
		if (pd->right!=NULL) summ(pd->right);
	}
	return 0;
}

/*void summ(node *root) //процедура подсчета суммы
{
	if (root != NULL) 
	{
		sum += root->inf;
		summ(root->left);
		summ(root->right);
	}
}
*/

void main()
{
	DWORD id[2];	//массив идентификаторов потоков
	HANDLE hThread[2];	//массив указателей потоков 
/*=============================================================================================================
													инициализция дерева
==============================================================================================================*/	
	node *root = NULL;
	for (int i = 1; i <= 6; i++) 
	{
		srand(20);
		insert_node(root, (int)(rand()%4)+i);
	}

/*=============================================================================================================
													печать списка и подсчет суммы	
==============================================================================================================*/
	search(root);
	//summ(root);
	sum=root->inf;

/*=============================================================================================================
													работа с потоками	
==============================================================================================================*/
	if (root->left!=NULL) mtx[0]=root->left;
	else mtx[0]=NULL;
	if (root->right!=NULL) mtx[1]=root->right;
	else mtx[1]=NULL;

	for (int j=0;j<2;j++)
	{
		hThread[j]=CreateThread(NULL,0,summ,&mtx[j],0,&id[j]);
		if (hThread[j]==NULL)
		{	
			std::cout<<"Поток № не был создан"<<"error"<<GetLastError();	
		}
	} 

	WaitForMultipleObjects(2,hThread,true,INFINITE);	//ожидание завершения всех потоков


//	summ(root->left);
//	summ(root->right);
	std::cout << std::endl << sum;
	getchar();
}
Дело в том что выдается эксепшен, насколько понимаю проблемы начинаются тогда когда одно поддерево пустое. В чем ошибка? и что нужно исправить?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Высота бинарного дерева dido171 Помощь студентам 4 02.12.2014 13:30
Высота бинарного дерева m9yt Общие вопросы C/C++ 5 13.03.2010 22:17
Создания бинарного дерева С++ Olya90 Помощь студентам 0 10.06.2009 18:58
Составление бинарного дерева [MI_nor] Общие вопросы C/C++ 1 08.05.2009 00:28
создание бинарного дерева zetrix Паскаль, Turbo Pascal, PascalABC.NET 2 30.11.2006 19:32