PDA

Visualizza la versione completa : [C] Inserimento Albero Binario Ricerca


Skilotto83
24-09-2004, 11:52
Salve a tutti...
Sto facendo un programma in C e avrei bisogno di un suggerimento..
Devo inserire delle celle di coordinata (x,y) e lato uno su un piano potenzialmente infinito...
La coordinata corrisponde al vertice in basso a sx della cella...
Pensavo di fare il tutto con unalbero binario...
Kome posso inserire correttamente le celle nell'albero avendo poi tempi ragionevoli per cercarle(devo inserirle in ordine)....
Grazie..

Luc@s
24-09-2004, 12:14
metti il titolo ;)

Cmq.....


// Mat.hpp

#ifndef CTREE_HPP_
#define CTREE_HPP_
#include "Define.hpp"

/// The tree node
typedef struct CTreeNode_t
{
int x;
int y;
struct CTreeNode_t* left;
struct CTreeNode_t* right;
} CTreeNode, *PCTreeNode;

/// The tree class
class CTree {
private:
PCTreeNode FRoot;
void InternalDestroyCTree(PCTreeNode&);
void InternalAdd(int, int, PCTreeNode&);
void InternalShowInOrder(PCTreeNode);
int InternalSearch(int, PCTreeNode);
public:
CTree()
{
FRoot = NULL;
};
virtual ~CTree()
{
InternalDestroyCTree(FRoot);
};
void Add(int x, int y);
void ShowInOrder();
int Search(int index)
{
return InternalSearch(index, FRoot);
};
};

#endif // CTREE_HPP_

// Ctree.cpp

#include "Ctree.hpp"

void CTree::InternalAdd(int x, int y , PCTreeNode& ARoot)
{
if (ARoot == NULL)
{
ARoot = new CTreeNode;
ARoot->x = x;
ARoot->y = y;
ARoot->left = NULL;
ARoot->right = NULL;
}
else
if (n <= ARoot->n) InternalAdd(x, y, ARoot->left);
else
if (n > ARoot->n) InternalAdd(x, y, ARoot->right);
}

void CTree::Add(int n)
{
InternalAdd(n, FRoot);
}

void CTree::InternalShowInOrder(PCTreeNode P)
{
if (P->left) InternalShowInOrder(P->left);
std::cout << "x = \t" << P->x << "y = \n \t" P->y "\n";
if (P->right) InternalShowInOrder(P->right);
}

void CTree::ShowInOrder()
{
std::cout << "Items sorted: ";
InternalShowInOrder(FRoot);
std::cout << std::endl;
}

void CTree::InternalDestroyCTree(PCTreeNode& P)
{
if (P->left) InternalDestroyCTree(P->left);
if (P->right) InternalDestroyCTree(P->right);
delete P;
P = NULL;
}

Skilotto83
24-09-2004, 12:57
Mmmmm...
Si..ho kapito l'idea...
Ma in C++!
Io dovrei farlo in C...e ci sono nn poke differenze...

Luc@s
24-09-2004, 13:04
in base al mio code modellati di conseguenza....basta trasformare la classe in funzioni.....la logica la stessa e il cod anche(+/-)

MMarzia
25-09-2004, 01:54
ricorda di specificare il linguaggio anche nel titolo del 3d ;)

Luc@s
25-09-2004, 11:06
cmq................... http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/ds_ToC.html

Loading