Copiare un albero binario in un vettore

di il
4 risposte

Copiare un albero binario in un vettore

Come da titolo vorrei copiare un albero binario in un vettore ma il codice che vi posto non restituisce il risultato desiderato come potrei risolvere?
void copia_vettore(bst T, item A[], int n){ 
	if(T==NULL || n < 0) return ;
	else {
		
		A[n]=T->val;
		copia_vettore(T->right, A, n-1);
		copia_vettore(T->left, A, n-1);
	}
}
n è il numero dei nodi

4 Risposte

  • Re: Copiare un albero binario in un vettore

    Così senza approfondire mi sembra che n sia l'altezza dell'albero che vuoi estrarre.

    Quindi
    
    A[n]=T->val;
    
    Non va bene. Prova a pensarci: quante volte la funzione ricorsivamente viene chiamata con un n uguale? Nel qual caso la funzione va a sovrascrivere un dato già memorizzato alla stessa posizione nel tuo vettore.
  • Re: Copiare un albero binario in un vettore

    LPs ha scritto:


    Così senza approfondire mi sembra che n sia l'altezza dell'albero che vuoi estrarre.

    Quindi
    
    A[n]=T->val;
    
    Non va bene. Prova a pensarci: quante volte la funzione ricorsivamente viene chiamata con un n uguale? Nel qual caso la funzione va a sovrascrivere un dato già memorizzato alla stessa posizione nel tuo vettore.
    Oltre al problema che sovrascrive gli elementi, c'è da dire che quando vado a stampare il vettore mi stampa solo un elemento.
  • Re: Copiare un albero binario in un vettore

    rairana ha scritto:


    LPs ha scritto:


    Così senza approfondire mi sembra che n sia l'altezza dell'albero che vuoi estrarre.

    Quindi
    
    A[n]=T->val;
    
    Non va bene. Prova a pensarci: quante volte la funzione ricorsivamente viene chiamata con un n uguale? Nel qual caso la funzione va a sovrascrivere un dato già memorizzato alla stessa posizione nel tuo vettore.
    Oltre al problema che sovrascrive gli elementi, c'è da dire che quando vado a stampare il vettore mi stampa solo un elemento.
    beh, non hai postato la funzione di stampa quindi...
  • Re: Copiare un albero binario in un vettore

    LPs ha scritto:


    rairana ha scritto:


    LPs ha scritto:


    Così senza approfondire mi sembra che n sia l'altezza dell'albero che vuoi estrarre.

    Quindi
    
    A[n]=T->val;
    
    Non va bene. Prova a pensarci: quante volte la funzione ricorsivamente viene chiamata con un n uguale? Nel qual caso la funzione va a sovrascrivere un dato già memorizzato alla stessa posizione nel tuo vettore.
    Oltre al problema che sovrascrive gli elementi, c'è da dire che quando vado a stampare il vettore mi stampa solo un elemento.
    beh, non hai postato la funzione di stampa quindi...
    
    
    	bst p=new_bst();
    	item s[5];
    	int i;
    	
    	p = input_bst(p);	
    	copia_vettore(p,s,5);
    	for(i=0;i<5;i++)
    	{
    		printf("%d", s[i]);
    	}
    
    Per test la funzione di stampa in questo caso è un semplice ciclo che scorre il vettore.
Devi accedere o registrarti per scrivere nel forum
4 risposte