Example #1
0
Noeud* genererArbre(int nbNoeuds)
{
  if (nbNoeuds > 0)
    return creerNoeud((rand() % ('Z' - 'A' + 1)) + 'A',
		      genererArbre(nbNoeuds / 2),
		      genererArbre((nbNoeuds - 1) / 2));
  return NULL;
}
Example #2
0
NODE construireArbreHuffman(CARACTERE** tas, SIZE size)
{
	NODE* former_node;
	CARACTERE* current_caractere;
	INDICE i;
	SIZE list_size=0;
	NODE_CHAIN CHAIN;
	NODE_CHAIN* pCHAIN=&CHAIN;
	CHAIN.chain_size=0;
	NODE* left_son;
	NODE* right_son;
	
	
	for (i=size-1; ( (tas[i]->occurence!= 0) && (i != 0) ) ; i--)
	{
		NODE* current_node;
		current_node=malloc(sizeof(NODE));
		*current_node = creerNoeud(tas[i], 0, tas[i]->occurence, 0, NULL, NULL, NULL, NULL);
		CHAIN.chain_size++;   
		if ( i == size-1 ) CHAIN.first_node = current_node;
		else former_node->list_next=current_node;
		former_node = current_node;
	}
	
	while ( CHAIN.chain_size >= 2 )
	{
		left_son=extractNodeFromChain(CHAIN, CHAIN.chain_size);
		right_son=extractNodeFromChain(CHAIN, CHAIN.chain_size-1);
		NODE* father;
		father=malloc(sizeof(NODE));
		*father = creerNoeud(NULL, 0, left_son->occurences_cumul + right_son->occurences_cumul, 0, NULL, left_son, right_son, NULL);
		left_son->father=father;
		right_son->father=father;
		left_son->node_bit=0;
		right_son->node_bit=1;
		deleteNodeFromChain(pCHAIN, CHAIN.chain_size);
		deleteNodeFromChain(pCHAIN, CHAIN.chain_size);
		right_son->list_next=NULL;
		left_son->list_next=NULL;
		insertNodeOnChain(pCHAIN, father, CHAIN.chain_size);
	}
 

	return *CHAIN.first_node;	
}
////////////////////////////////////////////////////////////////////////
///
/// @fn NoeudAbstrait* ArbreRendu::ajouterNouveauNoeud(const std::string& typeParent, const std::string& typeNouveauNoeud)
///
/// Cette fonction permet d'ajouter un nouveau noeud dans l'arbre de
/// rendu.
///
/// @param[in] typeParent       : Le type du parent du nouveau noeud.
/// @param[in] typeNouveauNoeud : Le type du nouveau noeud.
///
/// @return Le noeud nouvellement créé.
///
////////////////////////////////////////////////////////////////////////
NoeudAbstrait* ArbreRendu::ajouterNouveauNoeud(
   const std::string& typeParent,
   const std::string& typeNouveauNoeud
   )
{
   NoeudAbstrait* parent = chercher(typeParent);
   if (parent == 0) {
      // Incapable de trouver le parent
      return 0;
   }

   NoeudAbstrait* nouveauNoeud = creerNoeud(typeNouveauNoeud);
   if (nouveauNoeud)
      parent->ajouter(nouveauNoeud);

   return nouveauNoeud;
}
Example #4
0
int main( int argc, char * argv[] ){

	noeud * b = creerNoeud_f( T_CST_REEL,4.5456456 );
	noeud * c = creerNoeud_i( T_CST_ENTIER,85);
	noeud * d = creerNoeud_i( T_CST_ENTIER,10 );


	noeud * a = creerNoeud( T_AFFECT );
	ajouterFrere( a,b );
	ajouterFils( a,c );
	ajouterFils( a,d );


	afficherArbre(a);
	printf("\n\n");

	return 0;
}
////////////////////////////////////////////////////////////////////////
///
/// @fn bool BonusModifierSpawnPuck::Apply()
///
/// Applies the real effect on the node
/// returns false if the bonus finished the execution (no time to live)
/// in case it returns false, complete its execution
///
///
/// @return bool
///
////////////////////////////////////////////////////////////////////////
bool BonusModifierSpawnPuck::Apply()
{
    if(mOwner)
    {
        auto field = mOwner->getField();
        auto tree = field->getLogicTree();
        if(tree)
        {
            auto mNewNode = tree->creerNoeud(RAZER_KEY_PUCK);
            if(mNewNode)
            {
                mNewNode->setPosition(mOwner->getPosition());
                field->addNode(mNewNode);
            }
        }
    }

    return false;
}
Example #6
0
void main () {
	typePile *pile;
	char expr [TAILLEMAX];
	int val;
	char *ptexpr;
	typeNoeud *feuille, *noeud, *droit, *gauche;
	typeNoeud *racine;

	pile = initpile (TAILLEPILE); 
	ptexpr = expr;
	printf ("Entrer une expression postfixee\n");
	fgets (expr, TAILLEMAX, stdin);

	while (*ptexpr == ' ') ptexpr++;
	while ( *ptexpr != '=' && *ptexpr != '\n' ) {
		if (!isdigit (*ptexpr)) {
			droit = depiler(pile); 
			gauche = depiler(pile);
			noeud = creerNoeud (*ptexpr, gauche, droit);  
			empiler (pile, noeud);
			ptexpr++;
		} else {
			sscanf (ptexpr, "%d", &val);
			while (isdigit(*ptexpr)) ptexpr++;
			feuille = creerFeuille (val);     
			empiler (pile, feuille); 
		}
		while (*ptexpr == ' ') ptexpr++;
	}
	racine = depiler(pile);  

	printf ("\nExpression infixee : \n");
	infixe (racine); 
	printf ("\n\n");
	printf ("Expression prefixee : \n");
	prefixe (racine);
	printf ("\n\n");
	printf ("Valeur de l'expression : %d\n", eval (racine));
}
Example #7
0
int main (void) {
    
	/* Declaration d'un objet pile */
	typePile *pile;
    
    // VARIABLES STD
	char expr [TAILLEMAX];
	int val;
	char *ptexpr;
    
    // VARIABLES DE L'ARBRE
	typeNoeud *feuille, *noeud, *droit, *gauche;
	typeNoeud *racine; // Pointe sur la racine de l'arbre
    
    // INIT PILE
	pile = initpile (TAILLEPILE);
    
    // POINTEUR SUR L'EXPRESSION ENTREE
	ptexpr = expr;
    
    // DEMANDE EXPRESSION A L'UTILISATEUR
	printf ("Entrer une expression postfixee\n");
	fgets (expr, TAILLEMAX, stdin);
    
    //-------------------------------------------------
    // COMMENCER LE TRAITEMENT DE L'OPERATION POSTFIXEE
    //-------------------------------------------------
    
    // SAUTER LES BLANCS DU DEBUT
	while (*ptexpr == ' ') ptexpr++;
    
    
	/* L'expression se termine sur = ou \n */
	while ( *ptexpr != '=' && *ptexpr != '\n' ) {
		if (!isdigit (*ptexpr)) {
			/* On a un operateur dans *ptexpr */
			droit = depiler(pile); /* Depiler le fils droit */    //3
			gauche = depiler(pile); /* Depiler le fils gauche */  //4
			noeud = creerNoeud (*ptexpr, gauche, droit);          //5
			empiler (pile, noeud); /* Empiler le sous arbre */    //6
			ptexpr++;
		} else {
			/* On a un operande dont la valeur est dans val */
			sscanf (ptexpr, "%d", &val);
			while (isdigit(*ptexpr)) ptexpr++; /* Sauter les digits */
			feuille = creerFeuille (val);                         //1
			empiler (pile, feuille); /* Empiler le noeud */       //2
		}
		while (*ptexpr == ' ') ptexpr++; /* Sauter les blancs */
	}
	racine = depiler(pile);  // La racine est le dernier ÈlÈment de la pile
    
	printf ("\nExpression infixee : \n");
	infixe (racine); /* Parcours infixe de l'arbre obtenu */
	printf ("\n\n");
	printf ("Expression prefixee : \n");
	prefixe (racine); /* Parcours prÈfixe de l'arbre obtenu */
	printf ("\n\n");
	printf ("Valeur de l'expression : %d\n", eval (racine));
	system ("pause");
}