Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Inserimento Albero Binario Ricerca

    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..

  2. #2
    metti il titolo

    Cmq.....
    codice:
    // 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;
    }
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  3. #3
    Mmmmm...
    Si..ho kapito l'idea...
    Ma è in C++!
    Io dovrei farlo in C...e ci sono nn poke differenze...

  4. #4
    in base al mio code modellati di conseguenza....basta trasformare la classe in funzioni.....la logica è la stessa e il cod anche(+/-)
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  5. #5
    Utente di HTML.it L'avatar di MMarzia
    Registrato dal
    Mar 2001
    Messaggi
    1,781
    ricorda di specificare il linguaggio anche nel titolo del 3d
    io sono festosamente cicciottello :: e. cartman

    t'amo senza sapere come, nè quando nè da dove,
    t'amo direttamente senza problemi nè orgoglio:
    così ti amo perchè non so amare altrimenti

  6. #6
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.