Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-06-2008, 13:08   #1
skull87
Member
 
Iscritto dal: Sep 2006
Messaggi: 69
[C++]Problema Cancellazione Nodi BST (Albero Binario di Ricerca Ordinato) (RISOLTO)

Ho un problema su questo codice, la traccia la potete trovare in alto al codice stesso, praticamente l'algoritmo che calcola il numero di nodi indicati nella traccia mi sembra funzioni correttamente ma non ho capito per quale motivo i nodi indicati da cancellare non vengono cancellati. Il file albero.txt di partenza è 100 92 170 4 94 110 per entrambi gli alberi.

La funzione interessata è void AeB(PAnodo , PAnodo &,int &); e le sue collegate, il resto serve quasi per la maggior parte per effettuare una stampa grafica dell'albero.

Ecco il codice:
Codice PHP:
/*
   Note              : Sia A un albero qualsiasi e B un albero binario ordinato
                       Scrivere una procedura che calcoli quanti elementi
                       di B con almeno un figlio sono presenti in A, cancellando
                       contemporaneamente i nodi foglia di B presenti in A.

*/     

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <math.h>

#define TIPO_DATO int
#define OFFSET_SPACE 5

struct node {
    
int key;
    
struct nodeleft;
    
struct noderight;
};

struct node1{
        
TIPO_DATO *info;           //Puntatore all'informazione tenuta dal nodo
        
struct node1 *left;         //Puntatore sinistro
        
struct node1 *right;        //Puntatore destro
};

struct elemCoda{
       
struct node1 *elem;
       
struct elemCoda *next;
};


struct Albero{
             
int key;
             
Albero *left,*right;
             };

typedef Albero *PAlbero;

using namespace std;

void StampaBST(PAlbero ,int );
void CreaAlberoDaFile(PAlbero &);
PAlbero AlberoCasualebst(int ); //Generazione Alberi Casuali Ord
void InsertSort2PAlbero &,int bool &);
void LegaPadre(PAlbero PAlbero PAlbero PAlbero &);
void DelTNode(int PAlbero &, bool &);
void NuovoCandidato(int PAlbero &, PAlbero &);
void Cerca(PAlbero int PAlbero &, PAlbero &);
void DammiChiave(PAlbero ,int &);
void writeLevelTree(struct node1 *root); //Per Stampa Grafica
struct node1 *buildTree();  //Per Stampa Grafica
struct node1 *insertInOrder(struct node1 *rootTIPO_DATO info);  //Per Stampa Grafica
void pfileorder(PAlbero );
int Altezza(PAlbero );
void AeB(PAlbero PAlbero &,int &);
void CercaNonno(PAlberointPAlbero &,PAlbero &, PAlbero &);
bool cercaVal(PAlbero &,int);

int main(){
    
    
PAlbero A,B;
    
struct node1 *root NULL;
    
    
CreaAlberoDaFile(A);
    
//StampaBST(A,0);
    //system("pause");
    //Crea albero
    
printf("\n\t\t .: 1 :. Costruzione albero...\n");
    
root buildTree();
    if (
root==NULL) return 1;
    
    
//Stampa albero per livelli
    
system("cls");
    
writeLevelTree (root);
    
printf("\n\n\n");
    
system("pause");
    
//StampaBST(A,0);
    
CreaAlberoDaFile(B);
    
//B=AlberoCasualebst(3);
    
    
pfileorder(B);
    
//system("pause");
    //Crea albero
    
printf("\n\t\t .: 1 :. Costruzione albero...\n");
    
root buildTree();
    if (
root==NULL) return 1;
    
    
//Stampa albero per livelli
   // system("cls");
    
writeLevelTree (root);
    
printf("\n\n\n");
    
cout<<endl;
    
cout<<endl;
    
system("pause");
    
    
int nodi=0;
    
AeB(A,B,nodi);
    
    
cout<<"Nodi: "<<nodi<<endl;
    
    
pfileorder(B);
    
//system("pause");
    //Crea albero
    
printf("\n\t\t .: 1 :. Costruzione albero...\n");
    
root buildTree();
    if (
root==NULL) return 1;
    
    
//Stampa albero per livelli
   // system("cls");
    
writeLevelTree (root);
    
printf("\n\n\n");
    
cout<<endl;
    
cout<<endl;
    
system("pause");
    
    
system("pause");
    return 
0;
    
}

bool cercaVal(PAlbero &Treeint val){
    if(
Tree==NULL)
        return 
false;
    else if(
Tree->key==val && (Tree->left!=NULL || Tree->right!=NULL))
        return 
true;
    else if(
Tree->key==val && Tree->left==NULL && Tree->right==NULL){
         
PAlbero Padre=NULL,Nonno=NULL;
         
CercaNonno(Tree,Tree->key,Tree,Padre,Nonno);
         if(
Padre!=NULL){
                         if(
Padre->left!=NULL && Padre->left->key==val)
                         
Padre->left=NULL;
                         else if(
Padre->right!=NULL && Padre->right->key==val)
                         
Padre->right=NULL;
                         }
         return 
false;
         }
    else if(
Tree->key>val)
        return 
cercaVal(Tree->left,val);
    else
        return 
cercaVal(Tree->right,val);
    
}

void CercaNonno(PAlbero Treeint KeyValuePAlbero &Node,PAlbero &PadrePAlbero &Nonno){
  
int NodesKey;
  
Nonno=NULL;
  
Padre=NULL;
  
Node=Tree;
  
DammiChiave(NodeNodesKey) ;
  while ((
Node!=NULL) && (NodesKey!=KeyValue))
  {   
Nonno=Padre;
      
Padre=Node;
      if (
NodesKey>KeyValue)
         
Node=Node->left;
      else
         
Node=Node->right;
      
DammiChiave(NodeNodesKey);
  }
}


int sommaNodi(PAlbero &Tree){
    
int k=0;
    if(
Tree!=NULL){
                  if(
Tree->left!=NULL && Tree->right!=NULLk=Tree->key;
                  else 
k=0//non è una foglia
        
return  sommaNodi(Tree->left)+sommaNodi(Tree->right)+k;
        }
    else
        return 
0;



void AeB(PAlbero APAlbero &B,int &nodi){
     if(
A!=NULL){
                 if(
cercaVal(B,A->key)) nodi++;
                 
AeB(A->left,B,nodi);
                 
AeB(A->right,B,nodi);
                 }
     }
     
     
//Generazione di albero BST ordinato
PAlbero Insertbst(int info1PAlbero As, PAlbero Ad) {
// PER INSERIRE UNA FOGLIA SI CHIAMA CON Insert(Numero,NULL,NULL)                       
  
PAlbero A2;
  
A2= new Albero;
  
A2->key=info1;
  if(As>
Adswap(As,Ad);
  
A2->left=As;
  
A2->right=Ad;
  return 
A2;
}

PAlbero AlberoCasualebst(int n
{
//Dato un intero n restituisce un albero di interi di altezza n ORDINATO
  
if (n==0) {
            
//srand ( time(0) );
    
return Insertbst(rand()%100 ,NULL,NULL);
                }
  else{
           
//srand ( time(0) );
    
return Insertbst(rand()%100,AlberoCasualebst(n-1),AlberoCasualebst(n-1));     
           }
}

int Altezza(PAlbero A)  
// CALCOLA L’ALTEZZA DELL’ALBERO A
  
int HsHd;
  if (
A==NULL)
     return -
1;
  else   {
         
Hs=Altezza(A->left); Hd=Altezza(A->right);
         if (
Hs Hd)
                return ++
Hs;
         else
                return ++
Hd;
 }

Continua...
__________________
MondoLibero: Informazione Libera, Varia ed Eventuale
Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

Ultima modifica di skull87 : 19-06-2008 alle 12:54.
skull87 è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2008, 13:12   #2
skull87
Member
 
Iscritto dal: Sep 2006
Messaggi: 69
..Continua

Codice PHP:
void visita(PAlbero aint livelloint iofstream &outlista) {

// Check Livello
if (== livello) {
outlista<<a->key<<"\t";
return;
}
// Incrementa contatore livello
i++;
// Visita Nodo Sinistro
if (a->left != NULL)
visita(a->leftlivelloi,outlista);
// Visita Nodo Destro
if (a->right != NULL)
visita(a->rightlivelloi,outlista);
}

void pfileorder(PAlbero Tree){
     
    
int num;
    
//cout<<"Salva Albero su FILE:"<<endl;
    
string NomeLn,NomeOut;
    
ifstream filista;
    
ofstream outlista;
    
NomeOut="albero.txt";
    
outlista.open(NomeOut.c_str());
    if(!
outlista){
        
cerr<<"Non si puo' aprire il file!"<<endl;
        
system("pause");
    }
    
    for(
int k=0;k<=Altezza(Tree);k++)
    
visita(Tree,k,0,outlista);
    
    
outlista.close();
}

//Function per la cancellazione di un nodo

void LegaPadre(PAlbero OldChildPAlbero NewChildPAlbero PadrePAlbero &Tree)
//collega il nodo genitore con il sottoalbero connesso al nodo da cancellare
{
  if (
Padre==NULL)    //    {sostituiamo la root}
   
TreeNewChild;
 else
       if (
OldChild ==Padre->left
       
Padre->left=NewChild;  //    {sostituiamo al genitore il figlio sinistro}
       
else 
       
Padre->right=NewChild;  //    {sostituiamo al genitore il figlio destro}
}

void NuovoCandidato(int KeyValuePAlbero &CandidatoPAlbero &Tree)
{    
PAlbero Dummy;     //variabile ausiliare per la chiamata a Cerca
    
PAlbero PadrePAlbero OldCandidato;
    
int CandsKey;
OldCandidatoCandidato;

Cerca(OldCandidato->rightKeyValueDummyCandidato);

OldCandidato->keyCandidato->key;

DammiChiave(CandidatoCandsKey);

Cerca(OldCandidato->rightCandsKeyDummyPadre);

if (
Padre==NULL)
   
LegaPadre(CandidatoCandidato->rightOldCandidatoTree);
else  
   
LegaPadre(CandidatoCandidato->rightPadreTree);
}

void Cerca(PAlbero Treeint KeyValuePAlbero &NodePAlbero &Padre)
{
  
int NodesKey;
  
Padre=NULL;
  
Node=Tree;
  
DammiChiave(NodeNodesKey) ;
  while ((
Node!=NULL) && (NodesKey!=KeyValue)) 
  {
      
Padre=Node;
      if (
NodesKey>KeyValue
         
Node=Node->left;
      else
         
Node=Node->right;          
      
DammiChiave(NodeNodesKey);
  }
}

void DammiChiave(PAlbero TNodeint &TheKey)
//ritorna il key field del nodo puntato da Tnode, se Tnode è 
                              // NULL allora ritorna il valore di -100
    
if (TNode != NULL )
        
TheKeyTNode ->key;
    else
     
TheKey= -100;
}


void KillTNode(PAlbero Candidato){
     
     
delete Candidato;
     }

void DelTNode(int KeyValuePAlbero &Treebool &Done)
{   
PAlbero Candidato;     // puntatore al nodo candidato per la cancellatura
    
PAlbero Padre;         // puntatore al genitore del nodo candidato}
    
int CandsKey;
    
Done=true;
    
CercaTree,  KeyValueCandidatoPadre);
    
DammiChiave(CandidatoCandsKey);
    if (
CandsKey!=KeyValue
       
Done=false
   else
      if (
Candidato->left==NULL)
         
LegaPadre(CandidatoCandidato->rightPadreTree);
      else
         if (
Candidato->right==NULL)   {
             
LegaPadre(CandidatoCandidato->leftPadreTree);
           }
         else
            
NuovoCandidato(KeyValueCandidatoTree);
    
KillTNode(Candidato);
}

void StampaBST(PAlbero Tree,int i){
    if(
Tree!=NULL){
        
StampaBST(Tree->right,i+1);
        for(
int j=1;j<=i;j++)
            
cout<<" ";
        
cout<<Tree->key;
        
cout<<endl;
        
StampaBST(Tree->left,i+1);
    }
}

void CreaAlberoDaFile(PAlbero &Tree){
    
int num;
    
cout<<"Crea Albero da FILE:"<<endl;
    
Tree=NULL;
    
string NomeLn,NomeOut;
    
ifstream filista;
    
ofstream outlista;
    
NomeLn="albero.txt";
    
filista.open(NomeLn.c_str());
    if(!
filista){
        
cerr<<"Non si puo' aprire il file!"<<endl;
        
system("pause");
    }
   
filista>>num;  
   while (!
filista.eof()) { 
      
bool temp=false;
      
InsertSort2Treenumtemp); 
      if (
temp==falsecout<<"Numero preesistente ="<<num<<endl;
      else 
cout<<" Inserito numero= "<<num<<endl;
      
filista>>num;;
      }
      
system("pause");
    
filista.close();
}

void InsertSort2PAlbero &A,int mbool &inserito)   { //OK
      
if(A==NULL)  {
         
A=new Albero;
         
A->key m;
         
A->left=NULL;
         
A->right=NULL;
         
inserito=true;
         }          
      else if(
A->key<m)  InsertSort2(A->right,m,inserito);
      else if(
A->key>m)  InsertSort2(A->left,m,inserito);
      else 
inserito=false;
}

/*
 Helper function that allocates a new node
 with the given data and NULL left and right
 pointers.
*/
struct nodeNewNode(int data) {
  
struct nodenode = new(struct node);    // "new" is like "malloc"
  
node->key data;
  
node->left NULL;
  
node->right NULL;

  return(
node);


/*
 Give a binary search tree and a number, inserts a new node
 with the given number in the correct place in the tree.
 Returns the new root pointer which the caller should
 then use (the standard trick to avoid using reference
 parameters).
*/

struct nodeinsert(struct nodenodeint data) {
  
// 1. If the tree is empty, return a new, single node
  
if (node == NULL) {
    return(
NewNode(data));
  }
  else {
    
// 2. Otherwise, recur down the tree
    
if (data <= node->keynode->left insert(node->leftdata);
    else 
node->right insert(node->rightdata);

    return(
node); // return the (unchanged) node pointer
  
}



struct node1 *buildTree(){
      
/* int info;
       struct node1 *root = NULL;

       for(;info!=0;){
          printf("\n\tInserire elementi (0 per terminare): ");
          scanf("%d",&info);
          if (info!=0){
             printf("\tInserisco elemento %d nell'albero\n",info);
             root = insertInOrder(root,info);
             }
          }
       return root;*/
    
int num;
    
cout<<"Crea Albero da FILE:"<<endl;
    
struct node1 *root=NULL;
    
string NomeLn,NomeOut;
    
ifstream filista;
    
ofstream outlista;
    
NomeLn="albero.txt";
    
filista.open(NomeLn.c_str());
    if(!
filista){
        
cerr<<"Non si puo' aprire il file!"<<endl;
        
system("pause");
    }
    
filista>>num;
    while(!
filista.eof()){
        
root insertInOrder(root,num);
        
filista>>num;
    }
    
filista.close();
    return 
root;
}

/* 2 */
       /* 2.1 */
       
struct node1 *newNode(TIPO_DATO x){
              
struct node1 *elem = (struct node1 *)malloc (sizeof(struct node1));
              
TIPO_DATO *info = (TIPO_DATO *)malloc (sizeof(TIPO_DATO));

              if ((
elem==NULL)||(info==NULL)) return NULL;

              *
info =  x;
              
elem->info info;
              
elem->left NULL;
              
elem->right NULL;

              return 
elem;
       }

struct node1 *insertInOrder(struct node1 *rootTIPO_DATO info){
       
//Caso base
       
if (root == NULL) return (newNode(info));

       
//Ricorsione
       
if (info > *(root->info))
          
root->right insertInOrder(root->rightinfo);
       else
          
root->left insertInOrder(root->leftinfo);
       return 
root;
}

/* 5 */
        /* 5.1 */
        /*     Restituisce il numero di livelli dell'albero   */
        /*     (Necessario per una corretta spaziatura)       */
        
int contaLivelli(struct node1 *rootint nLeftint nRight){
            
int x,y;

            if (
root==NULL) return 0;
            
contaLivelli(root->leftnLeft+1nRight);
            
contaLivelli(root->rightnLeftnRight+1);

            if (
x>y) return (x+1);
            return (
y+1);
        }

        
/* 5.2 */
        /*     Inserisce in coda alla lista puntata da "coda" il nodo x       */
        
struct elemCoda *insertInTail(struct elemCoda *coda,struct node1 *x){
               
struct elemCoda *tmp = (struct elemCoda *) malloc (sizeof(struct elemCoda));
               
struct elemCoda *conta;

               if (
tmp==NULL) return NULL;
               if (
x==NULL){
                  
tmp->elem NULL;
                  
tmp->next NULL;
               } else{
                    
tmp->elem x;
                    
tmp->next NULL;
                 }

               if (
coda==NULL) return tmp;

               for(
conta=coda;conta->next!=NULL;conta=conta->next);

               
conta->next tmp;

               return 
coda;
        }


void writeLevelTree (struct node1 *root){
     
struct elemCoda *coda=NULL,
                     *
tmp=NULL;
                                        
/* Per una "corretta" spaziatura        */
     
int nLevel,                        //#livelli
         
nNodesCurrentLevel,            //#nodi del livello correntemente elaborato
         
currentLevel=0,                //#livello correntemente elaborato
         
conta,                         //var. per ciclo spaziatura
         
nCurrentNode=0;                //#nodo correntemente in esame

     //Calcolo numero livelli dell'albero
     
nLevel contaLivelli(root,1,1);  /* 5.1 */

     //Inserimento radice albero in coda alla lista
     
coda insertInTail(coda,root);   /* 5.2 */

     //Fin quando la coda dei nodi è piena...
     
for(;coda!=NULL;){

              
nNodesCurrentLevel=(int)pow (2currentLevel); //#nodi del corrente livello (per spaziatura)
              
++nCurrentNode;                                //#nodo corrente rispetto al livello (per spaziatura)

              //Spaziatura prima del valore del nodo
              
for (conta=0conta<(OFFSET_SPACE*nLevel/nNodesCurrentLevel); ++conta)
                  
printf(" ");

              
//Valore del nodo (se il nodo non esiste, NULL, due spazi)
              
if (coda->elem!=NULL)
                 
printf("%d",*(coda->elem->info));
              else 
printf("  ");

              
//Spaziatura dopo il valore del nodo
              
for (conta=0conta<(OFFSET_SPACE*nLevel/nNodesCurrentLevel); ++conta)
                  
printf(" ");

              
//Se sono stati stampati tutti i nodi di questo livello
              // vai a capo, azzera il #nodo corrente e incrementa
              // il valore del livello corrente
              
if (nCurrentNode == nNodesCurrentLevel){
                 
currentLevel++;
                 
nCurrentNode=0;
                 
//cout<<"\n L "<<currentLevel<<"     \n";
                
printf("\n\n\n");
              }

              
//Inserisci in coda i due figli (destro e sinistro) del nodo corrente.
              
tmp coda;
              
coda coda->next;
              if (
tmp->elem!=NULL){
                 
coda insertInTail(coda,tmp->elem->left);
                 
coda insertInTail(coda,tmp->elem->right);
              } else
                    
//Se il nodo corrente è NULL e questo in corso di elaborazione
                    // non è l'ultimo livello, inserisci in coda due figli NULL
                    // (destro e sinistro del nodo NULL) in coda (per una
                    //  "corretta" spaziatura)
                    
if (currentLevel<nLevel-1){
                       
coda insertInTail(coda,NULL);
                       
coda insertInTail(coda,NULL);
                    }
     }

Grazie 1000.
__________________
MondoLibero: Informazione Libera, Varia ed Eventuale
Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

Ultima modifica di skull87 : 17-06-2008 alle 14:05.
skull87 è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2008, 13:20   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
la traccia è posta male ed è implementata peggio: dalle definizioni delle struct all'inizio si vede che hai definito entrambi gli alberi come binari, mentre A è un albero generico, cioè un grafo connesso aciclico. inoltre hai implementato delle funzioni che prendono come primo parametro un puntatore ad un nodo: sono praticamente dei metodi.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2008, 13:25   #4
skull87
Member
 
Iscritto dal: Sep 2006
Messaggi: 69
Quote:
Originariamente inviato da 71104 Guarda i messaggi
la traccia è posta male ed è implementata peggio: dalle definizioni delle struct all'inizio si vede che hai definito entrambi gli alberi come binari, mentre A è un albero generico, cioè un grafo connesso aciclico. inoltre hai implementato delle funzioni che prendono come primo parametro un puntatore ad un nodo: sono praticamente dei metodi.
Per le funzioni che sono praticamente dei metodi ti riferisci a quelle commentate //Per stampa grafica?

Quelle non le ho scritte io, ho solo fatto in modo di far andare la mia struttura con quelle che mi stampano l'albero nella forma in cui lo disegneresti sul foglio.

Per quanto riguarda la struttura, la base è la stessa, ho pensato bene di semplificarmi la vita per una gestione migliore :-).

Cosa c'è da correggere per far andare il codice?
__________________
MondoLibero: Informazione Libera, Varia ed Eventuale
Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.
skull87 è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2008, 13:34   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da skull87 Guarda i messaggi
Per le funzioni che sono praticamente dei metodi ti riferisci a quelle commentate //Per stampa grafica?
tutte quelle che prendono in ingresso un parametro di tipo "PAnodo", "PAnodo&", o "struct nodo1*" : anziché come funzioni potevi implementarle come metodi delle struct Anodo e nodo1. è solo la prima semplificazione che si può fare nel tuo codice, quasi sicuramente se ne possono fare molte altre.

altra cosa: ti consiglierei di sceglierti uno straccio di naming convention coerente, e ti consiglierei di usare sempre nomi inglesi, perché quell' "Anodo" sembra una struct che descrive il contrario di un Catodo
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2008, 14:01   #6
skull87
Member
 
Iscritto dal: Sep 2006
Messaggi: 69
Quote:
Originariamente inviato da 71104 Guarda i messaggi
altra cosa: ti consiglierei di sceglierti uno straccio di naming convention coerente, e ti consiglierei di usare sempre nomi inglesi, perché quell' "Anodo" sembra una struct che descrive il contrario di un Catodo
Eh....:-) me lo avevano già detto in effetti, solo che per velocizzarmi a trascrivere il codice sul pc non ho voluto fare la modifica, ma mi sa che lo faccio, anzi l'ho fatto: Albero va bene?

Ma sei riuscito a capire il problema per cui i nodi non mi vengono cancellati?
__________________
MondoLibero: Informazione Libera, Varia ed Eventuale
Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.
skull87 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 00:25   #7
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da 71104 Guarda i messaggi
quell' "Anodo" sembra una struct che descrive il contrario di un Catodo
Ma ROTFL!
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 00:55   #8
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Sappi che non leggerò mai tutto quel codice alla ricerca dell'errore ( ), ti allego però un po' di roba che avevo scritto come esercizio in vista di un esonero, c'è anche un metodo abbastanza semplice per la cancellazione di un nodo da un albero binario di ricerca.

ciao
Allegati
File Type: zip bst.zip (8.6 KB, 45 visite)
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 00:57   #9
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
E giacché ci siamo, ma dal momento che scrivi questo programma in C++, perché usare printf() e compagnia bella?
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 12:49   #10
skull87
Member
 
Iscritto dal: Sep 2006
Messaggi: 69
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Sappi che non leggerò mai tutto quel codice alla ricerca dell'errore ( ), ti allego però un po' di roba che avevo scritto come esercizio in vista di un esonero, c'è anche un metodo abbastanza semplice per la cancellazione di un nodo da un albero binario di ricerca.

ciao
Grazie mille, le tue function possono sempre essre utili. ho risolto comunque, prendendo spunto dalla tua funzione. Il problema è che cancellavo il puntatore al padre, che è un puntatore ad un nodo dell'albero, ma il nodo dell'albero non veniva toccato, grazie mille.
__________________
MondoLibero: Informazione Libera, Varia ed Eventuale
Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.
skull87 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 12:50   #11
skull87
Member
 
Iscritto dal: Sep 2006
Messaggi: 69
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
E giacché ci siamo, ma dal momento che scrivi questo programma in C++, perché usare printf() e compagnia bella?
E...perchè le ho copiate da una persona che le ha scritte ed adattate al mio codice :-)
__________________
MondoLibero: Informazione Libera, Varia ed Eventuale
Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.
skull87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
La NASA ha discusso le problematiche del...
Il razzo spaziale NASA SLS e la capsula ...
Stazione Spaziale Internazionale: Crew-1...
Samsung Galaxy S26 Ultra: la ricarica de...
Apple ha un nuovo partner per la sua App...
Trenitalia introduce il prezzo dinamico ...
OnePlus non si ferma più: c'&egra...
DAZN sconta il piano Full per 6 mesi, se...
L'uso dell'IA nei giochi è cancer...
Meta punta sul nucleare USA per alimenta...
Le migliori offerte Amazon del weekend: ...
La crisi dell'hardware spinge i negozi g...
Apple Watch SE 3 scontato su Amazon: il ...
Robot aspirapolvere davvero scontati: si...
DDR5 troppo cara: il passato di AMD potr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:31.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v