Visualizzazione dei risultati da 1 a 3 su 3

Discussione: ho bisogno di aiuto!

  1. #1

    ho bisogno di aiuto!

    salve a tutti, ho fatto un programma in c sugli alberi bst..ho fatto tutte le procedure essenziali ma mi manca quella che cancella un elemento e infine quella che cancella tutto l'albero!!
    ho provato a implementarla ma tra puntatori ecc mi perdo:
    c'è qualcuno che può darmi una mano?? ne sarei veramente grato!!!!!
    quello che mi servirebbe sarebbe una procedura che mi permette di eliminare un elemento dall'albero mantenedo intatto quest'ultimo (ho letto che bisogna fare 3 casi a seconda dei figli che quell'elemento ha!) e poi una procedura che mi cancelli completamente l'albero liberando tutta la memoria.

    metto di seguito il codice che ho fatto:

    #include <stdio.h>
    #include <stdlib.h>



    //------------------STRUTTURA ALBERO-----------------------------

    struct tree_node
    {
    int key;
    struct tree_node *left;
    struct tree_node *right;
    };

    struct tree_node *root; //puntatore alla struttura albero


    //------------------DEFINIZIONE FUNZIONI-----------------------

    void init_bst(struct tree_node **root);

    void define_bst(struct tree_node **root);

    struct tree_node *bst_insert(struct tree_node *root,struct tree_node *r,int val);

    int bst_search(struct tree_node *root,int val);

    void bst_delete(struct tree_node *root,int val);

    struct tree_node *bst_max(struct tree_node *root);





    //----------------------------MAIN-----------------------------

    void main()
    {
    int val,ris;


    init_bst(&root);

    define_bst(&root);


    printf("cosa vuoi cercare? ");
    scanf("%d",&val);

    bst_delete(root,val);





    ris = bst_search(root,val);

    if(ris == 1)
    printf("TROVATO");
    else
    printf("NON TROVATO\n");



    }


    //-----------INIZIALIZZAZIONE DEL BST------------------

    void init_bst(struct tree_node **root)
    {
    *root = NULL;
    }


    //-----------------DEFINIZIONE BST------------------------

    void define_bst(struct tree_node **root) //dico quanti elementi e quali elementi prendere
    {
    int n,k,i;

    printf("Numeri di elementi: ");
    scanf("%d",&n);

    for(i=0;i<n;i++)
    {
    printf("Inserisci l'elemento N. %d: ",i);
    scanf("%d",&k);
    *root = bst_insert(*root,*root,k);
    }
    }



    //--------------------INSERIMENTO ELEMENTO IN BTS-------------------------

    struct tree_node *bst_insert(struct tree_node *root,struct tree_node *r,int val)
    {
    if(!r) //entra se è = a NULL
    {
    r = (struct tree_node *) malloc(sizeof(struct tree_node));

    if(!r)
    {
    printf("memoria insufficiente!\n");
    exit(1);
    }
    r->key = val;
    r->left = NULL;
    r->right = NULL;

    if(!root) //entra solo all'inizio quando root punta a NULL cioèquando non è stato ancora creato il primo elemento
    return r;

    if(val < root->key)
    root->left = r;

    else
    root->right = r;

    return r;
    }

    if(val < r->key) //a parte la prima volta prima di inserire il numero nuovo guardo se inserlo a destra se è >
    bst_insert(r,r->left,val); // o a sinistra se è <
    else
    bst_insert(r,r->right,val);
    return root;
    }



    //------------------------RICERCA NEL BST-------------------------

    int bst_search(struct tree_node *root,int val)
    {
    if(!root)
    return 0; //non trovato
    else if(root->key == val)
    return 1; //trovato
    else if(root->key < val)
    bst_search(root->right,val);
    else
    bst_search(root->left,val);
    //return -1;
    }


    //----------------------MASSIMO IN BST---------------------------------

    struct tree_node *bst_max(struct tree_node *root)
    {
    while(root->right)
    root = root->right;
    return root;
    }



    //------------------------CANCELLA VALORE BST-------------------------


    void bst_delete(struct tree_node *root,int val)
    {

    if(!root)
    {
    printf("valore già non presente");
    exit(1);
    }

    }

    vi ringrazio per l'attenzione e spero di avere una risposta, grazie per l'eventuale aiuto
    se per caso qualcuno di voi riesce a implementarlo potrebbe mandarmi il codice a:
    ketaki@fastwebnet.it GRAZIE!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Guarda che un forum non funziona cosi' ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    Leggi il Regolamento per conoscere le norme da seguire nella partecipazione a quest'area del forum.

    Il titolo non è particolarmente significativo, e non reca il linguaggio di programmazione come richiesto.

    Oltre a questi fattori, in genere è bene tentare di scrivere autonomamente il codice, ed eventualmente proporlo al forum in caso di errori, senza richiedere che siano altri a svolgere i propri compiti. Non è una regola, ma è senz'altro una premura di rispetto nei confronti degli utenti.

    Apri una nuova discussione per il tuo problema seguendo le indicazioni fornite.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.