Copiare un albero binario in un vettore

di Anonimizzato18204 il
4 risposte
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

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