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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2012, 15:53   #1
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию Класс - Бинарное дерево. (С++)

Только начал работать с классами и не могу понять ошибку
Код:
#include<iostream>
using namespace std;


class BinTree{
private:

public:	
	class Node{
	public:
		int usel;
		Node *pr;
		Node *pl;
	};
	Node * first(int d);
	Node * search_insert(Node *root, int d);
	void print_tree(Node *root, int l);
}



BinTree::Node *BinTree::first(int d){
	Node *pv = new Node;
	pv->usel =d; 
	pv->pl	= 0;
	pv->pr	= 0;
	return pv;
}

BinTree::Node *BinTree::search_insert(Node *root, int d){
	Node *pv=root, *prev;
	bool found = false;
	while (pv && !found){
		prev = pv;
		if		(d==pv->usel) found = true;
		else if (d< pv->usel) pv	= pv->pl;
		else				  pv	= pv->pr;
	}
	if (found) return pv;
	Node *pnew = new Node;
	pnew->usel = d;
	pnew->pl   = 0;
	pnew->pr   = 0;
	if (d < pnew->usel) prev->pl = pnew;
	else prev->pr = pnew;
	return pnew;
};

void BinTree::print_tree(Node *p, int level){
	if (p){
		BinTree::print_tree(p->pl, level+1);
		for (int i=0; i<level; i++) cout << "     ";
		cout << p->usel << endl;
		BinTree::print_tree(p->pr, level + 1);
	}
}

int main(){
	BinTree cl;
	int b[]={10, 25, 20, 6, 21, 8, 1, 30};
	class BinTree::Node *root = cl.first(b[0]);
	for (int i=1; i<8; i++) cl.search_insert(root, b[i]);
	cl.print_tree(root, 0);
	return 0;
}
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 30.07.2012, 17:18   #2
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Могу предположить, что дело в забытой ;, после объявления класса.
В классе ни где не хранится адрес корня(здесь теряется вся идея ООП).
В функциях класса не обязательно писать BinTree::.
Нет конструктора и деструктора.

Код:
class BinTree{
public:	
	class Node{
		int usel;
		Node *pr;
		Node *pl;
	};
       // конструкторы
        BinTree();
        BinTree(BinTree * R);
        BinTree(int val);
        BinTree(int * arr);
        // деструктор
        ~BinTree();
        // функции
        void add( int val);
        Node * get_root();
	Node * search_insert(int d);
        void del_node(Node * R);
	void print_tree();

private:
        Node *root;
};
Примерно так выглядит класс бинарного дерева.
Ёж птица гордая, пока не пнешь не полетит.

Последний раз редактировалось Ezhuk; 30.07.2012 в 17:20.
Ezhuk вне форума Ответить с цитированием
Старый 30.07.2012, 17:48   #3
Артём Волжанкин
Пользователь
 
Аватар для Артём Волжанкин
 
Регистрация: 07.07.2012
Сообщений: 99
По умолчанию

Ezhuk спасибо за помощь!
Человек
Артём Волжанкин вне форума Ответить с цитированием
Старый 30.07.2012, 21:55   #4
LancX
Пользователь
 
Аватар для LancX
 
Регистрация: 30.04.2012
Сообщений: 52
По умолчанию

class Node без конструктора, конечно без него можно и обойтись, но с ним будет легче) Как минимум тем, что указатели pr и pl инициализированы нулями.
Код:
Node(int v_usel):usel(v_usel),pr(0),pl(0){}
При любом расчете, число, правильность которого для всех очевидна, становится источником ошибок.
LancX вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево DTroy Visual C++ 1 22.11.2011 21:09
Бинарное дерево Си Evacuator Помощь студентам 2 01.06.2011 21:40
Разработать шаблонный класс бинарное дерево nezloi Помощь студентам 1 11.06.2010 15:19
Бинарное дерево) Svetlanka_ya Помощь студентам 0 17.04.2010 11:13
Бинарное дерево g0liath Помощь студентам 2 16.02.2008 23:54