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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2015, 21:44   #1
DaoKemZem
 
Регистрация: 17.10.2015
Сообщений: 3
По умолчанию

Добрый вечер. Подскажите пожалуйста с кодом.
Вот то, что есть. Но тут ошибка и я не очень понимаю как ее исправить. Можете помочь?

(не знаю как сделать рамку С++)

Это сам ввод бинарного дерева
Код:
#include <iostream>

using namespace std;
struct node
{
	int a;
	int data;
	node *l;
	node *r;
	node *left;
	node *right;
	node *rightChild;
	node *leftChild;
	
};
void addtree(node **t, int k)
{
	if (*t == 0)
	{
		(*t) = new node();
		(*t)->data = k;
		(*t)->l = 0;
		(*t)->r = 0;
	}
	else
	{
		if (k >= (*t)->data) addtree(&(*t)->r, k);
		if (k <= (*t)->data) addtree(&(*t)->l, k);
	}
}
void treeout(node *t)
{
	int k;
	if (t != 0)
	{
		k = t->data;

		cout << "k" << k << "\n";
		treeout(t->l);
		treeout(t->r);
	}
}




void main()
{
	node *t;
	int i, k, n;
	cout << "n=";
	cin >> n;
	t = 0;
	for (i = 1; i <= n; i++)
	{
		cout << "vvesti k";
		cin >> k;
		addtree(&t, k);
	}

	treeout(t);



}



А это уже удаление узла


void Remove(int value)
{
	
	node *_root;
	node *pointer = _root;
	node *parent = NULL;

	while (pointer != NULL && pointer->value != value)
	{
		parent = pointer;
		if (value < pointer->value)
			pointer = pointer->left;
		else
			pointer = pointer->right;
	}

	if (pointer != NULL)
	{
		node *removed = NULL;

		if (pointer->left == NULL || pointer->right == NULL)
		{
			node *child = NULL;
			removed = pointer;

			if (pointer->left != NULL)
				child = pointer->left;
			else if (pointer->right != NULL)
				child = pointer->right;

			if (parent == NULL)
				_root = child;
			else
			{
				if (parent->left == pointer)
					parent->left = child;
				else
					parent->right = child;
			}
		}
		else // (pointer->left != NULL && pointer->right != NULL)
		{
			node * mostLeft = pointer->right;
			node * mostLeftParent = pointer;

			while (mostLeft->left != NULL)
			{
				mostLeftParent = mostLeft;
				mostLeft = mostLeft->left;
			}

			pointer->value = mostLeft->value;
			removed = mostLeft;

			if (mostLeftParent->left == mostLeft)
				mostLeftParent->left = NULL;
			else
				mostLeftParent->right = mostLeft->right;

		}

		cout << removed << " deleted" << endl;
		delete removed;
	}
}
Что нужно изменить или дописать, чтобы он корректно выводил ответ?

Помогите пожалуйста. Перефразирую задание: нужно удалить дерево

Последний раз редактировалось Stilet; 07.11.2015 в 09:54.
DaoKemZem вне форума Ответить с цитированием
Старый 07.11.2015, 09:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтобы он корректно выводил ответ?
А сейчас что выводит?
Цитата:
нужно удалить дерево
Код:
void Die(node *t)
{
	if (t != 0)
	{
		treeout(t->l);
		treeout(t->r);
                delete t;
	}
}
Годится?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление узла из дерева rafffkaaa Паскаль, Turbo Pascal, PascalABC.NET 0 19.05.2013 14:41
Haskell поиск пути от корня бинарного дерева до узла [x,y] Fill_x Помощь студентам 0 10.11.2011 18:34
Удаление узла из красно-черного дерева CodeNOT Общие вопросы C/C++ 0 18.05.2011 07:15