IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

copie un arbre dans un autre arbre vide


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Par défaut copie un arbre dans un autre arbre vide
    Salut;
    On dispose d'un arbre généalogique dont lequel chaque nœud implémenté a la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct nœud
    {
       char nom[];
       pnd gauche;
       pnd droite
    }nd;
    On suppose que l'arbre est déjà créé et que sa racine est : nd *racine;

    Q: écrire une fonction qui copie le contenu de cet arbre dans un autre arbre.
    La fonction doit respecter la forme suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void copy(nd *racine,nd**racine_copie)
    Alors, pour cet exercice, j'ai essayé plusieurs fois en langage C et je n'ai pas réussi. Je pense que vous pouvez m'aider ou me corriger mon exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void copy(nd *racine,nd**racine_copie){
    	nd * noeud;  noeud = NULL;
    	if (racine) {
    		 if (racine->droite) {
                     racine->droite= racine_copie->droite
    		 strcopy(racine->nom,racine_copie->nom);
                     }
    		 else{
    		 racine->gauche= racine_copie->gauche
                     strcopy(racine->nom,racine_copie->nom);
    		 }
    		return (noeud);
    	}
    }
    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 33
    Par défaut
    Bonsoir,

    Première chose:
    Ton code ne fait qu'un appel: au mieux, il va copier le fils gauche et le fils droit, ensuite il va n'ira pas plus loin, il semble nécessaire d'ajouter de la récursion dans le code.

    Deuxième chose:
    Je suppose que pnd est un pointeur vers nd, dans ce cas, en écrivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    racine->droite= racine_copie->droite
    tu ne fais qu'une copie de pointeur, donc dès que racine sera modifié, racine_copie également.

    Troisième chose:
    tu écris dans une fonction sensé renvoyer un void? De plus, tu renverras toujours NULL: noeud n'est jamais affecté sauf à sa déclaration.

    Je t'avoue que je comprend pas trop, en fait une idée de programme en pseudo-code serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    copy ( Arbre source, Arbre destination ) {
      if (source) {
        top_destination = top_source;
        copy ( source_gauche, destination_gauche );
        copy ( source_droite, destination_droite);
      } 
    }
    Et ce, évidemment sans oublier de faire les malloc nécessaire avant d'appeler copy...

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/06/2008, 14h57
  2. Copie un tableau dans un autre
    Par Montor dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/05/2008, 21h29
  3. Réponses: 19
    Dernier message: 10/03/2008, 09h11
  4. Copie une colonne dans l'autre
    Par afrodje dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/10/2007, 16h37
  5. [9i]Copie de table dans un autre schéma.
    Par sali dans le forum Oracle
    Réponses: 5
    Dernier message: 10/02/2006, 07h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo