Da albero binario a vettore

di il
2 risposte

Da albero binario a vettore

Buonasera a tutti, ho un problema forse banale ma che mi mette in crisi. Dato un albero binario, devo creare un vettore contenete tutte le chiavi dell'albero.
la funzione da implementare (get_aarray)ha necessariamente quel prototipo.. per semplificare ho pensato di scomporlo in due fasi
Non capisco dove sbaglio... Consigli? Grazie mille!
int * get__array(int_bin_tree *tree){
    if (tree== NULL) return NULL;
    int *V;
    int dim;
    dim=num_nodes(tree);
    V=(int*)malloc(sizeof(int)*dim);
     V=crea_vett(V,0,dim,tree);
  return V;
}


int *crea_vett(int *V,  int index, , int dim,int_bin_tree *tree){
if (index==dim) return V;
if (index<dim){          
          V[index]=tree->key;
          crea_vett(V,index+1, dim,tree->left);
         crea_vett(V,index+1, dim,tree->right);
       }

2 Risposte

  • Re: Da albero binario a vettore

    Il tuo errore è non incrementi correttamente index.
    Dovresti partire dal codice che visita (in un qualsiasi ordine) il tuo albero, es.:
    void visita( tnodo *nodo )
    {
      if(nodo == NULL)
        return;
      printf( "Nodo %d\n", nodo->key );
      if(nodo->left != NULL)
        visita(nodo->left);
      if(nodo->right != NULL)
        visita(nodo->right);
    }
    
    Su questa struttura devi fare una funzione che solo conta:
    void visita_conta( tnodo *nodo, int *conta )
    {
      if(nodo == NULL)
        return;
      //printf( "Nodo %d\n", nodo->key );
      (*conta) ++;
      if(nodo->left != NULL)
        visita_conta(nodo->left, conta);
      if(nodo->right != NULL)
        visita_conta(nodo->right, conta);
    }
    
    Allo stesso modo devi fare un funzione che riempie un array
    void visita_riempi( tnodo *nodo, int *ar, int *index )
    {
      if(nodo == NULL)
        return;
      //printf( "Nodo %d\n", nodo->key );
      ar[*index]=node->key;
      (*index) ++;
      if(nodo->left != NULL)
        visita_riempi(nodo->left, ar, index);
      if(nodo->right != NULL)
        visita_riempi(nodo->right, ar, index);
    }
    
    La sequenza sarà di questo tipo
    int conta;
    int index;
    
    conta = 0;
    visita_conta(albero,&conta);
    // alloco "conta" elementi
    // ......
    index =0;
    visita_riempi(albero, V, &index);
  • Re: Da albero binario a vettore

    Grazie mille!
Devi accedere o registrarti per scrivere nel forum
2 risposte