Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

17.11.2008, 11:15. Просмотров 677. Ответов 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. это типа у меня пошаговая отладка такая
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2008, 11:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проблема: создаются лишние элементы в бинарном дереве (C++):

Поиск в Бинарном Дереве! - C++
Задано бинарное дерево. Определить, есть ли в этом дереве хотя бы два одинаковых элемента. Вывести на экран все одинаковые элементы в...

Разобраться в бинарном дереве - C++
Нашел вот такой вариант построения бинарного дерева. Просьба прокомментировать строки кода которые выделил ниже: #include...

Предок в бинарном дереве - C++
Помогите пожалуйста! Необходимо написать программу, которая для двух вершин дерева определяет, является ли одна из них предком другой. ...

Строки в бинарном дереве - C++
Есть шаблонный класс бинарного дерева. Со числами он работает нормально, но при добавлении строки в соответствующий объект этого класса на...

Поиск дубликатов в бинарном дереве - C++
Требуется создать функцию поиска дубликатов ИНФОРМАЦИОННОЙ ЧАСТИ, НЕ КЛЮЧА в бинарном дереве. Ничего похожего в гугле и здесь на...

Функция поиска в бинарном дереве - C++
Я понимаю как реализовать эту функцию если в бинарном дереве хранятся обычные числа(последовательно сравниваем и двигаемся по дереву в...

1
Vasiliusis
41 / 41 / 2
Регистрация: 14.10.2008
Сообщений: 131
20.11.2008, 15:10  [ТС] #2
Проблема решена. Можно закрывать тему
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2008, 15:10
Привет! Вот еще темы с ответами:

Оператор присвоения в бинарном дереве - C++
Не смог разобраться. Прокомментируйте, будьте добры. Задание такое, определите стандартный конструктор и функции управления...

Количество листьев в бинарном дереве - C++
Задача: Найти количество листьев в дереве. Собственно ввод и вывод дерева есть: #include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; ...

Сумма чисел в бинарном дереве - C++
Выбрать уровень(глубину, высоту) бинарного дерева и посчитать сумму чисел(в вершинах), находящихся на этом уровне. P.S. Дерево построено,...

Подсчет вершин в бинарном дереве - C++
Здравствуйте,помогите написать функцию ,которая подсчитывает число вершин на N-ом уровне бинарного дерева T(корень считать вершиной 0-го...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.