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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2015, 19:37   #1
Ти6ка
Пользователь
 
Регистрация: 22.04.2015
Сообщений: 24
Сообщение Бинарные деревья С++

Помогите написать функцию(без шаблонов) на С++:
Вершина бинарного дерева содержит ключ, N целых значений и два указателя на потомков. Написать функцию удаления вершины с максимальной суммой N целых значений узла.
Код:
#include <iostream>
#define TRUE 1
#define FALSE 0
using namespace std;
struct  node
{
	int Key;
	int Count;
	node *Left;
	node *Right;
};
node *Tree;  //Указатель на корень дерева
node  *Res;  //Указатель на найденную вершину
int B;     //Признак нахождения вершины в дереве
node** GetTree()
{
	return &Tree;
}

void Search(int x, node **p) //Поиск звена x
{
	if (*p == NULL)   //*p - указатель на вершину 
	{
		*p = new(node);
		(**p).Key = x;
		(**p).Count = 1;
		(**p).Left = (**p).Right = NULL;
	}
	else
	if (x<(**p).Key) Search(x, &((**p).Left));
	else
	if (x>(**p).Key) Search(x, &((**p).Right));
	else  (**p).Count += 1;
}

void BuildTree() //Построение бинарного дерева
{
	int el;
	cout << "Введите ключи вершин дерева: \n";
	cin >> el;
	while (el != 0)
	{
		Search(el, &Tree);
		cin >> el;
	}
}

void Vyvod(node **w, int l)  //Вывод на экран
{
	int i;
	if (*w != NULL)            //*w - указатель на корень 
	{
		Vyvod(&((**w).Right), l + 1);
		for (i = 1; i <= l; i++)
			cout << "   ";
		cout << (**w).Key << endl;
		Vyvod(&((**w).Left), l + 1);
	}
}

void VyvodV(node **w, int l, node **V)  //Вывод на экран
{
	int i;
	if (*w != *V)            //*w - указатель на корень 
	{
		VyvodV(&((**w).Right), l + 1, V);
		for (i = 1; i <= l; i++)
			cout << "   ";
		cout << (**w).Key << endl;
		VyvodV(&((**w).Left), l + 1, V);
	}
}

int Poisk(int k)   //Поиск вершины с ключом k 
{
	node *p, *q = 0; B = FALSE; p = Tree;
	int i = 0, v;
	if (Tree != NULL)
	do
	{
		i++;
		q = p; if ((*p).Key == k) B = TRUE;
		else
		{
			q = p;
			if (k<(*p).Key)  p = (*p).Left;
			else  p = (*p).Right;
		}
	} while (!B  &&  p != NULL);
	Res = q;
	VyvodV(GetTree(), 0, &Res);
	return B;
}


void main()
{
	setlocale(LC_CTYPE, "Russian");
	int el;
	BuildTree();
	Vyvod(GetTree(), 0);
}
Ти6ка вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ бинарные деревья vadiprog Помощь студентам 4 02.05.2012 14:52
Бинарные деревья Татьяна91 Помощь студентам 0 14.03.2012 17:41
Бинарные деревья в C# farshmaker C# (си шарп) 0 29.02.2012 22:30
Бинарные деревья J-lo Помощь студентам 0 27.05.2010 23:01
Бинарные деревья на Си++ osichev Помощь студентам 1 07.12.2009 23:31