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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2010, 10:33   #1
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию Бинарное дерево(проблема с выводом)

здравствуйте, уважаемые...
вот я строю бинарное дерево, а затем хочу вывести на экран содержимое.
Вроде всё правильно делал но есть пробелма.
Код:
Код:
#include <iostream>
#include <conio.h>
using namespace std;

struct node
{
	int data;
	node* left;
	node* right;
};

class Tree
{
	node* first;
	node* create;
public:
	Tree() { first=NULL;}
	void add(int d); // создание дерева 
	void print();     // фунция для ввода дерева
private:
	node* son(node* tree,int d);  // добавление элементов в непустое дерево
	bool print_son(node* tree);   // рекурсивная ф-ция для вывода
	
};


void Tree::add(int d)
{
	if(first==NULL)
	{
		first=new node;
		first->data=d;
		first->left=NULL;
		first->right=NULL;
		create = first;
	}
	else
		son(first,d);
}

node* Tree::son(node* tree, int d)
{
	if(tree==NULL)
	{
		node* temp;
		temp=new node;
		temp->data=d;
		temp->left=NULL;
		temp->right=NULL;
		return temp;
	}
	else if(d>(tree->data))
	{
		
		tree->right=son(tree->right,d);
	}
	else
	{
		tree->left=son(tree->left,d);
	}
}


void Tree::print()
{
	cout<<create->data<<" ";
	print_son(create->left);
	print_son(create->right);
	
}

bool Tree::print_son(node* tree)
{
	if(tree==NULL)
		return true;
	else
	{
		cout<<tree->data<<" ";
		print_son(tree->left);
		print_son(tree->right);
	}
}




int main(void)
{
	Tree one;
	one.add(3);
	one.add(0);
	one.add(5);
	one.print();
	getch();
}
но когда я вызываю
one.add(3);
one.add(0);
one.add(1); one.print(); мне выводится 3 1 хотя по идее должен показать 3 0 1.
заполняю значения правильно, в debug-режиме всё проверил, но правильно вывести никак не получается.
прошу посмотрите пожалуйста фунцию print, что в ней не так? рекурсивно вызываю для каждого элемента? укажите на ошибку.
Код:
void Tree::print()
{
	cout<<create->data<<" ";
	print_son(create->left);
	print_son(create->right);
	
}

bool Tree::print_son(node* tree)
{
	if(tree==NULL)
		return true;
	else
	{
		cout<<tree->data<<" ";
		print_son(tree->left);
		print_son(tree->right);
	}
}
ThisIzGame вне форума Ответить с цитированием
Старый 04.05.2010, 13:25   #2
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

спасибо, я уже сам разобрался
всё-таки поборол её... если кому пригодиться вот мой код

Код:
#include <iostream>
#include <conio.h>
using namespace std;

struct node   
{
	int data;
	node* left;
	node* right;
};

class Tree      // наше деревцо
{
	// закрытые фунции, 
	node* first;
	void add(node* tree, int a); // добавление элемента в непустое дерево
	bool print_son(node* tree);  // вывод элементов дерева
public:
	Tree() {first=NULL;}
	void create(int a);     // создание дерева
	void print();              // вывод	
	// void found(int a);
};

void Tree::create(int a)
{
	if(first!=NULL)
		add(first,a);
	else
	{
		first=new node;
		first->data=a;
		first->left=first->right=NULL;
	}
}

void Tree::add(node* tree,int a)
{
	if(a<(tree->data))
	{
		if(tree->left!=NULL)
			add(tree->left,a);
		else
		{
			tree->left = new node;
			tree->left->data=a;
			tree->left->left=NULL;
			tree->left->right=NULL;
		}
	}
	else if(a>=(tree->data))
	{
		if(tree->right!=NULL)
			add(tree->right,a);
		else
		{
			tree->right = new node;
			tree->right->data=a;
			tree->right->left=NULL;
			tree->right->right=NULL;
		}
	}
}

void Tree::print()
{
	cout<<first->data<<" ";
	print_son(first->left);
	print_son(first->right);
}

bool Tree::print_son(node* tree)
{
	if(tree==NULL)
		return true;
	else
	{
		cout<<tree->data<<" ";
		print_son(tree->left);
		print_son(tree->right);
	}
}


int main(void)
{
	Tree one;
	one.create(3);
	one.create(0);
	one.create(1);
	one.create(5);
	one.print();
	getch();
}

Последний раз редактировалось ThisIzGame; 04.05.2010 в 13:25. Причина: опечатался немного
ThisIzGame вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево?? energywav Общие вопросы C/C++ 2 18.12.2009 01:13
Бинарное дерево Lazio Общие вопросы C/C++ 2 10.09.2009 20:31
Бинарное дерево g0liath Помощь студентам 2 16.02.2008 23:54