Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vasiliusis
37 / 37 / 0
Регистрация: 14.10.2008
Сообщений: 127
#1

Проблема: создаются лишние элементы в бинарном дереве - C++

17.11.2008, 11:15. Просмотров 653. Ответов 1
Метки нет (Все метки)

Вот такой код:

Код
#include <iostream>
using namespace std;

class Node
{
public:

	int number;
	Node* nextLeft;
	Node* nextRight;
	Node* last;
};

void fillTheTree(unsigned, Node*, Node*, Node*);

void main()
{
	const unsigned arraySize = 13;
	unsigned array[arraySize] = {15, 3, 46, 54, 17, 81, 56, 72, 61, 59, 8, 3, 21};
	int num = -1;
	Node* root = NULL;
	Node* ptr = NULL;
	Node* ptrTemp = NULL;
	Node* current = NULL;

	ptr = new Node;//записываем корень
	root = ptr;
	ptr->number = array[0];
	ptr->nextLeft = NULL;
	ptr->nextRight = NULL;
	ptr->last = NULL;
	current = ptr;
	ptrTemp = ptr;

	int i = 1;
	while (i < 8)
	{
		fillTheTree(array[i], root, ptrTemp, current);
		i++;
	}

	ptr = root;
	ptr = ptr->nextRight;
	ptr = ptr->nextRight;
	ptr = ptr->last;
	ptr = ptr->nextLeft;
	ptr = ptr->last;
	ptr = ptr->nextRight;
	ptr = ptr->nextRight;
	ptr = ptr->nextLeft;
	ptr = ptr->nextRight;
	cout<<"chislo == 72 - "<<ptr->number<<endl;

	cout<<"\nptr->nextLeft "<<ptr->nextLeft<<"\nptr->nextRight "<<ptr->nextRight<<endl<<endl;
}


void fillTheTree(unsigned digit, Node* ptr, Node* ptrTemp, Node* current)
{
	int rez = 0;
	static int count = 1;
	if (digit < ptr->number)
	{
		if ((ptr->nextLeft == NULL))
		{
			ptr = new Node;
			ptr->nextLeft = NULL;
			ptr->nextRight = NULL;
			ptr->number = digit;
			current->nextLeft = ptr;
			ptr->last = ptrTemp;
			return;
		}

		if ((ptr->nextLeft != NULL))
		{
			if (digit == 72)
			{
				cout<<count<<":  "<<"!!! Kogda nextRight != NULL\n";
				cout<<"     "<<digit<<" < "<<ptr->number<<endl;
				count++;
			}
			ptr = ptr->nextLeft;
			fillTheTree(digit, ptr, ptr, ptr);
		}
	}
	
	if (digit >= ptr->number)
	{
		if ((ptr->nextRight == NULL))
		{
			if (digit == 72)
			{
				cout<<count<<":  "<<"Kogda nextRight == NULL\n";
				cout<<"     "<<digit<<" >= "<<ptr->number<<endl;
				count++;
			}
			ptr = new Node;
			ptr->nextLeft = NULL;
			ptr->nextRight = NULL;
			ptr->number = digit;
			current->nextRight = ptr;
			ptr->last = ptrTemp;
			return;
		}

		if ((ptr->nextRight != NULL))
		{
			if (digit == 72)
			{
				cout<<count<<":  "<<"Kogda nextRight != NULL\n";
				cout<<"     "<<digit<<" >= "<<ptr->number<<endl;
				count++;
			}

			ptr = ptr->nextRight;
			fillTheTree(digit, ptr, ptr, ptr);
		}
	}
}
Почему создаются лишние элементы????
Почему появляются указатели направо, когда обрабатывается число 72 и все следующие за ним???
КУДА ФУНЦИЯ ВОЗВРАЩАЕТ УПРАВЛЕНИЕ ПОСЛЕ 5 ШАГА????

При выполении программы шагов 6 и 7 быть ну никак не должно!!!!

Нужен свежий взгляд.

P.S. это типа у меня пошаговая отладка такая
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2008, 11:15     Проблема: создаются лишние элементы в бинарном дереве
Посмотрите здесь:

C++ Количество листьев в бинарном дереве
Поиск в Бинарном Дереве! C++
Поиск ключа в бинарном дереве поиска C++
Сумма чисел в бинарном дереве C++
Строки в бинарном дереве C++
Необычная функция в бинарном дереве поиска C++
Поиск дубликатов в бинарном дереве C++
C++ Разобраться в бинарном дереве
Бинарное дерево в бинарном дереве: обход C++
C++ Оператор присвоения в бинарном дереве
C++ Удалить узел в бинарном дереве
Предок в бинарном дереве C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vasiliusis
37 / 37 / 0
Регистрация: 14.10.2008
Сообщений: 127
20.11.2008, 15:10  [ТС]     Проблема: создаются лишние элементы в бинарном дереве #2
Проблема решена. Можно закрывать тему
Yandex
Объявления
20.11.2008, 15:10     Проблема: создаются лишние элементы в бинарном дереве
Ответ Создать тему
Опции темы

Текущее время: 04:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru