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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ malloc vs. calloc http://www.cyberforum.ru/cpp-beginners/thread16094.html
Когда стоит использовать malloc , а когда calloc?
C++ Чтобы программа называла больше или меньше задуманного числа задача состоит в том чтобы программа называла больше или меньше задуманного числа. посмотрите пожалуйста, где то ошибка. а найти самостоятельно не могу. #include<iostream.h> #include<math.h> #include<conio.h> #include<stdlib.h> int main() { http://www.cyberforum.ru/cpp-beginners/thread16080.html
ошибочка C++
такой код: после выполнения слышу звук ошибки и не получается закрыть окно консоли где ошибка(подозреваю что где-то в перегрузке +) #include <string> #include <iostream> #include <stdlib.h> using namespace std; #define M 40
C++ расстановка королев
Здавствуйте, уважаемые эксперты. Пытаюсь решить задачу с расстановкой королев на доске 8*8. Необходимо расставить так, чтобы ни одна фигура не била другую. Алгоритм вроде правильный, но Вылазит следующая ошибка: C:\Documents and Settings\Диманчег\Мои документы\Visual Studio 2005\Projects\Chess_Queen(modificated)\Debug\Chess_Queen(modificated).exe : fatal error LNK1120: 1 unresolved externals ...
C++ помогите со стеком http://www.cyberforum.ru/cpp-beginners/thread16077.html
есть задача:" даны 2 стека, содержащие по 4 вещественных числа. Записать их в третий стек, чередуя числа из первого и второго стеков. причем числа первого стека разместить в обратном порядке." помогите пожалуйста ибо со стеками у меня проблемы..... читал литературу но все равно не понимаю....
C++ работа с файлами помогите написать два кода сгенерирование с помощью датчика случайных чисел массив и запись в текстовый файл; вывод из текстового файла массива подробнее

Показать сообщение отдельно
Vasiliusis
37 / 37 / 0
Регистрация: 14.10.2008
Сообщений: 127
17.11.2008, 11:15     Проблема: создаются лишние элементы в бинарном дереве
Вот такой код:

Код
#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. это типа у меня пошаговая отладка такая
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru