Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di brumac
    Registrato dal
    Jul 2003
    Messaggi
    187

    [c++] Visita in profondità

    Salve a tutti, ho un problema.

    Ho definito una struttura dati ad albero binario non bilanciato( cioè non è detto che ogni nodo abbia due figli, ma può averne anche solo uno o zero). Questo albero può avere al massimo 32 livelli. Voglio effettuare una ricerca in profondità, che conti quanti nodi ci sono all'interno dell'albero. Le classi che ho definito sono:

    class Nodo {

    private:
    int link;

    public:

    Nodo * sx;
    Nodo * dx;

    Nodo(int l) {
    link = l;
    sx=0;
    dx=0;
    }

    Nodo() {
    link = -1;
    sx = 0;
    dx = 0;
    }

    ~Nodo() { }

    int getLink() { return link; }

    void setLink(int l) { link = l; }

    };

    class Tree {

    public:

    Nodo *root;

    Tree(){

    root = new Nodo();
    }

    ~Tree(){}


    Ho costruito un albero mediante un metodo build, che qui non ho riportato. Una volta contati i nodi voglio moltiplicare il numero dei nodi per la size di un singolo nodo, in modo da trovare la size di tutto l'albero.

    Spero che qualcuno possa aiutarmi.

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Una volta contati i nodi voglio moltiplicare il numero dei nodi per la size di un singolo nodo, in modo da trovare la size di tutto l'albero.
    Che intendi per size di un nodo?

  3. #3
    penso intenda l'altezza dell'albero o + probabilmente il numero di nodi
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  4. #4
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Io l'avrei fatta in questo modo circa:
    (uso una struttura ad albero + semplice)
    codice:
    int conta (nodo * radice)
    {
    	// Calcola il nodo corrente
    	int i = 1;
    
    	// Nodo sinistro
    	if(radice->sx != NULL) {
    		i = i + conta(radice->sx);
    	}
    
    	// Nodo destro
    	if(radice->dx != NULL) {
    		i = i + conta(radice->dx);
    	}
    
    	return i;
    }
    Ma non funziona...
    Chi sa dirmi perchè?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.