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

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

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

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

17.11.2008, 11:15. Просмотров 660. Ответов 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++
Выбрать уровень(глубину, высоту) бинарного дерева и посчитать сумму чисел(в вершинах), находящихся на этом уровне. P.S. Дерево построено,...

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

Удаление элемента (узла) в бинарном дереве - C++
По заданию необходимо в бинарном дереве удалять все элементы равные искомому(как все удалять, я почему-то не осознал). На данный момент я...

Бинарное дерево в бинарном дереве: обход - C++
Есть шаблонный класс бинарного дерева, описанный ниже. Все методы рабочие. template &lt;class T&gt; class Tree { public: Tree();...

Необычная функция в бинарном дереве поиска - C++
Здравствуйте, уважаемые форумчане. Очень прошу Вашей помощи. Задание: Реализовать структуру данных двоичное дерево поиска,...

Связать узлы одного уровня в бинарном дереве - C++
В сети нашел мало инфьі на ету тему, нужна помощь поскольку мое решение работает не коректно. Есть такое дерево ...

В бинарном дереве подсчитать число его листов - C++
В бинарном дереве подсчитать число его листов и напечатать их значения: при прямом обходидерева.

Простая организация удаление узла в бинарном дереве - C++
Добрый день. У меня получился сильно громоздкий код для удаление узла дерева (не корня). Нет никаких идей по поводу упрощения. Может...

Найти сумму листьев в бинарном дереве поиска - C++
Дано бинарное дерево поиска(ключи-целые числа).Найти сумму листьев. Вот мой код.Но он не работает.Скажите почему и исправьте.Спасибо ...

Поиск суммы последовательных узлов в бинарном дереве - C++
Дано: бинарное дерево (Например созданное по этому алгоритму). Число S. Нужно найти последовательность узлов (только с вверху вниз или...


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

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

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