Les partenaires publicitaires:

Comment créer un arbre binaire en c

Arbres binaires en C sont un bon moyen d'organiser dynamiquement des données pour faciliter la recherche. Toutefois, ils exigent beaucoup de travail à entretenir.

Créer l'arbre binaire

  1. Structurez votre arbre binaire. Chaque arbre binaire besoin d'une structure, même si elle a une seule variable. Choisir un nom, puis utiliser typedef pour le créer:

    typedef struct student_data STUDENT_DATA-

  2. Définir la structure. Inclure deux pointeurs vers la même structure:

    struct student_data {
    int student_ID-
    int student_grade-
    STUDENT_DATA gauche, droit;
    } -

  3. Allouer un pointeur vers cette structure de données, l'initialiser à NULL, pour être la tête de l'arbre:

    STUDENT_DATA * = null-étudiants

Ajouter à l'arbre binaire

  1. Allouer deux pointeurs temporaires à la structure de données:

    STUDENT_DATA new_student, cur_student-

  2. Utilisez malloc () pour créer un nouvel élément, vérifiant toujours pour une erreur:

    if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) {abort () -}

  3. Remplissez les champs du nouvel élément. Définissez ses champs gauche et droit à NULL:

    new_student-gt; student_ID = newID-
    new_student-gt; student_size = newsize-
    new_student-gt; de gauche = null-
    new_student-gt; droite = null-

  4. Considérons la variable de la tête. Si la variable de la tête est NULL, ceci est le premier élément ajouté à l'arbre, donc définir la variable de la tête pour pointer vers elle, et vous avez terminé:


    if (! étudiants) {étudiants = new_student- Retour-}

  5. Commencez par le haut de l'arbre:

    cur_student = étudiants-
    while (cur_student) {

  6. Manipulez l'entrée en double si la nouvelle valeur et la valeur actuelle sont égaux:

     if (newID == cur_student-gt; student_ID) {abort () -}

  7. Traiter avec des valeurs inégales. Si la nouvelle valeur est inférieure à la valeur de courant, le nouvel élément va à gauche. Ajouter immédiatement si il n'y a rien sur la gauche. Sinon, traverse à gauche et boucle:

     if (newID lt; cur_student-gt; student_ID) {
    if (cur_student-gt; gauche == NULL) {
    cur_student-gt; = gauche newstudent-
    retourner 1-
    }
    cur_student = cur_student-gt; gauche;




  8. Faites la même chose sur la droite, sinon:

     } Else {
    if (cur_student-gt; droit == NULL) {
    cur_student-gt; droite = newstudent-
    retourner 1-
    }
    cur_student = cur_student-gt; droit;
    }
    }

Rechercher l'arbre binaire

  1. Insérer un pointage variable temporaire à la structure de données:

    STUDENT_DATA * cur_student-

  2. Réglez votre variable temporaire à la variable de la tête:

    cur_student = students_head-

  3. Boucle à travers les éléments, la vérification de la valeur souhaitée:

    while (cur_student) {
    if (cur_student-gt; student_ID == 15) {return cur_student-gt; student_grade-}

  4. Direction gauche ou à droite, et la boucle, si elle est introuvable:

     if (cur_student-gt; student_ID lt; 15) {
    cur_student = cur_student-gt; droit;
    } Else {
    cur_student = cur_student-gt; gauche;
    }

  5. Voir si la boucle se termine. Si elle le fait, cela signifie que vous jamais trouvé l'article:

    }
    retourner 0-

Nettoyer

  1. Libère l'arbre binaire lorsque votre programme se termine, comme tous les systèmes ne fonctionnent pas se chargera automatiquement. Ce mieux est d'utiliser une fonction récursive:

    deallocate_binary_tree void (* STUDENT_DATA arbre) {

  2. Observez: Si il n'y a pas un arbre, il n'y a rien à faire:

     if (! arbre) Retour-

  3. Libère les sous-arbres gauche et droite de manière récursive:

     deallocate_binary_tree (arbres gt; à gauche) -
    deallocate_binary_tree (arbres gt; à droite) -

  4. Libère l'élément, et vous avez terminé:

     libre (arbre) -
    }

Conseils & Avertissements

  • Recherche et l'ajout d'arbres binaires peuvent également être effectuées en utilisant la récursivité. Ce sera beaucoup plus facile à écrire et à maintenir, mais un peu plus difficile à comprendre, jusqu'à ce que vous vous habituez à elle.
  • Il est commun pour créer un arbre binaire qui ne contient que des pointeurs dans une seconde structure de données C, souvent un tableau ou une liste chaînée, où les données réelles réside. Chaque arbre binaire est un indice pour rechercher rapidement un champ unique des données de la liste.
  • Suppression d'un arbre binaire est un algorithme très compliqué en C, mais dans de nombreuses utilisations des arbres binaires, les éléments ne sont jamais supprimés.
» » » » Comment créer un arbre binaire en c