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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2012, 20:50   #1
jambas92
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
Сообщение ссылки на файл в дереве

Здравствуйте! Есть дерево, которое построена по принципу left child - right sibling. Как можно сделать так, чтобы данные (child, sibling and parent) записывался в файл?

Код:
#include <iostream>
#include <fstream>
using namespace std;
template <typename E> class GTNode {
private:
	E element;
	GTNode<E>* rent;
	GTNode<E>* leftchild;
	GTNode<E>* rightsib;

public:
	GTNode(const E& value) { // Constructor
		rent = leftchild = rightsib = NULL;
		element = value;
	}

	GTNode(const E& value, GTNode<E>* par, GTNode<E>* leftc, GTNode<E>* rights) { // Constructor
		element = value;
		rent = par; 
		leftchild = leftc; 
		rightsib = rights;
	}  

	~GTNode() {}                     // Destructor
	E value() { return element; } // Return node's value
	bool isLeaf() { return leftchild == NULL; } // True if node is a leaf
	GTNode* parent() { return rent; } // Return node's parent
	GTNode* leftmostChild() { return leftchild; } // Return node's first child
	GTNode* rightSibling() { return rightsib; } // Return node's right sibling
	void setValue(E&) { element = value; } // Set node's value
    
	void insertFirst(GTNode<E>* n) { // Insert as the first child
		n->rightsib = leftchild;
		n->rent = this;
		leftchild = n;
	}

	void insertNext(GTNode<E>* n) {  // Insert as the right sibling
	    n->rightsib = rightsib;
	    n->rent = rent;
	    rightsib = n;
	}

	void removeFirst() {            // Remove first child from tree
		if (leftchild == NULL) return;
		GTNode<E>* temp = leftchild;
	    leftchild = leftchild->rightsib;
	    delete temp;  // BAD -- lose all its subtree!
	}

	void removeNext() {             // Remove right sibling from tree
	    if (rightsib == NULL) return;
		GTNode<E>* temp = rightsib;
		rightsib = rightsib->rightsib;
		delete temp;  // BAD -- lose all its subtree!
	}
};
/////////////////////////////////////////////
template <typename E> class GenTree {
private:
	GTNode<E>* rt;
// Print using a preorder traversal
	void printhelp(GTNode<E>* root) 
	{
	/*if (root->isLeaf())
	{
		cout << "Leaf: ";
	}
	else 
	{
		cout << "Internal: ";
	}
	cout << root->value() << "\n";
	// Now process the children of "root"
	for (GTNode<E>* temp = root->leftmostChild(); temp != NULL; temp = temp->rightSibling())
	{
		printhelp(temp);
	}*/
		if (root->isLeaf())
		{
			cout << "Leaf: ";
		}
		else 
		{
			cout << "Internal: ";
		}
		cout << root->value() << "\n";
		if (root->rightSibling() != NULL)
		{
			printhelp(root->rightSibling());
		}
		if (root->leftmostChild() != NULL)
		{
			printhelp(root->leftmostChild());
		}
	}
	
public:
	GenTree() 
	{ 
		rt = NULL; 
	}          // Constructor
	// AWFUL! Throw away the storage
	~GenTree() { rt = NULL; }         // Destructor
	// AWFUL! Throw away the storage
	void clear() { rt = NULL; }       // Send all nodes to free store
	// Return the root of the tree
	GTNode<E>* root() 
	{ 
		return rt; 
	}
	// Combine two trees
	void newroot(const E& value, GTNode<E>* first, GTNode<E>* sib) 
	{
		clear();
		rt = new GTNode<E>(value, (GTNode<E>*)NULL, first, sib);
	}
	// Print a tree
	void print() 
	{ 
		printhelp(rt); 
	}
};
jambas92 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарный поиск в дереве c++ vvsmvps Фриланс 1 23.05.2011 10:44
Как быстро убить ссылки на файл? ZhukElena Microsoft Office Excel 1 03.09.2009 12:33
помогите с индексами в дереве! Анастасия123456789 Общие вопросы Delphi 1 26.11.2008 15:26
не работают ссылки на другой файл abocharov Microsoft Office Excel 3 24.10.2008 13:10
Подскажите как прописывать Item, в дереве Tree View, чтобы при выдлении в Мемо загружался файл Yurek Компоненты Delphi 5 08.11.2007 22:49