Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di adp
    Registrato dal
    Oct 2008
    Messaggi
    87

    verificare se un albero binario è bilanciato

    ciao ragazzi, mi occorrerebbe una gentileza, dovrei controllare se un albero binario è bilanciato, qualcuno mi puo' autare???
    grazie
    Adp

  2. #2
    Puoi provare con una funzione ricorsiva, ogni volta che arrivi ad una foglia verifichi che l'altezza attuale sia pari alla precedente, se non è cosi l'albero non è bilanciato, altrimenti ripeti per tutte le foglie restanti.
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  3. #3
    Fai un ciclo con il quale scorri il lato destro ed il lato sinistro, tenendo 2 contatori che incrementi ad ogni ciclo e due bool con cui vedi se un lato è finito o no.
    Quando il ciclo finisce, se i due contatori sono diversi, l'albero non è bilanciato.

    Oltre alla funzione ricorsiva consigliata da GliderKite (un po' + complessa ma + pulita)
    lolide
    Java Programmer

    Informati

  4. #4
    Utente di HTML.it L'avatar di adp
    Registrato dal
    Oct 2008
    Messaggi
    87
    io avevo fatto in questo modo:
    codice:
    public static <E> boolean bilanciato(BinaryTree<E> T){
    	if(T.isEmpty())
    		throw new EmptyTreeException("albero vuoto");
    	if(isProper(T,T.root())) 
    			return true;
    	else
    		return false;
    			}
    public static <E> boolean isProper(BinaryTree<E>T, Position<E>nodo){
    	if((T.hasLeft(nodo) && T.hasRight(nodo)))
    		return true; 
    	if(T.isInternal(nodo)){
    		for(Position<E> child:T.children(nodo))
    			if(isProper(T,child))
    				return true;
    	}
    		return false;	
    }
    }
    ma resituisce sempre e solo true!!
    Adp

  5. #5
    Non l'ho testata, quindi non ti posso dare garanzie certe, ma il concetto base di quello che ti proponevo è questo:

    codice:
    bool balanced( const node_t *root, int height, const int h_temp )
    {
    	if( root == NULL )
    	{
    		if( !height )
    			height = h_temp;
    			
    		else if( height != h_temp )
    			return false;
    			
    		return true;
    	}
    	
    	if( balanced(root->left, height, h_temp+1) )
    		return balanced( root->right, height, h_temp+1 );
    		
    	return false;
    }
    
    
    // La chiami come:
    balanced( root, 0, -1 );
    Come vedi la funzione è molto semplice
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  6. #6
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Scusami, mi fai capire cosa fai qui:


    if( balanced(root->left, height, h_temp+1) )

    ???
    Con i sogni possiamo conoscere il futuro...

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.