Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    106

    Albero binario di ricerca

    Qualcuno potrebbe gentilmente aiutarmi a chiarire dei dubbi,sul comportamento di queste due funzioni.Sicuramente omettendo l'else il return finale viene eseguito sempre,ma non riesco a capire bene come si comporta la funzione,nel caso in cui entra nell'if precedente dove n<radice.In quel caso chiama la funzione con i nuovi paramatri e poi esegue l'ultimo return??

    codice:
    Node* findNode(InfoType n,Node* tree){
    if(!tree) return 0;                                         //albero vuoto
    if(n==tree->label)return tree;                         //n==radice
    if(n<tree->label) return findNode(n,tree->left);  //n<radice
    return findNode(n,tree->right);                       //n>radice
    }
    diverso da ..
    codice:
    Node* findNode(InfoType n,Node* tree){
    if(!tree) return 0;                                         //albero vuoto
    if(n==tree->label)return tree;                         //n==radice
    if(n<tree->label) {return findNode(n,tree->left);}  //n<radice
    else{
             return findNode(n,tree->right); }                      //n>radice
    }
    grazie!!

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

    Moderazione

    Il linguaggio va indicato anche nel titolo, come da Regolamento.

    Qui l'ho aggiunto io, tienilo a mente per il futuro.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    106
    grazie starò attento...

  4. #4

    Re: Albero binario di ricerca

    Originariamente inviato da Gianni91
    Qualcuno potrebbe gentilmente aiutarmi a chiarire dei dubbi,sul comportamento di queste due funzioni.Sicuramente omettendo l'else il return finale viene eseguito sempre,ma non riesco a capire bene come si comporta la funzione,nel caso in cui entra nell'if precedente dove n<radice.In quel caso chiama la funzione con i nuovi paramatri e poi esegue l'ultimo return??

    codice:
    Node* findNode(InfoType n,Node* tree){
    if(!tree) return 0;                                         //albero vuoto
    if(n==tree->label)return tree;                         //n==radice
    if(n<tree->label) return findNode(n,tree->left);  //n<radice
    return findNode(n,tree->right);                       //n>radice
    }
    diverso da ..
    codice:
    Node* findNode(InfoType n,Node* tree){
    if(!tree) return 0;                                         //albero vuoto
    if(n==tree->label)return tree;                         //n==radice
    if(n<tree->label) {return findNode(n,tree->left);}  //n<radice
    else{
             return findNode(n,tree->right); }                      //n>radice
    }
    grazie!!
    aghf, perché chiamare un nodo "tree"? al massimo poteva chiamarlo subtree, anche se vista la funzione poteva usare root o cose del genere... secondo me è fuorviante, ma vabbé è un problema personale
    //fine considerazioni personali

    ad ogni modo tra i due codici che hai linkato non cambia niente, le grafe non servono e nemmeno l'else

    il
    codice:
    return funzione();
    viene considerata un unica istruzione, nella quale prima viene chiamata la funzione "funzione()", viene eseguita e quindi ne viene preso il valore restituito e quindi ha luogo il return.

    perciò va letta come:
    se n è uguale al valore nella radice attuale -> ritorna n; (il che per come è fatta porrà fine a tutta la funzione ricorsiva ritornando il valore sino al livello "iniziale")
    se n è minore del valore nella radice attuale -> ricorri in figlio di sinistra e ritorna il suo valore a fine chiamata;
    (in tutti gli altri casi) ricorri sul figlio di destra e ritorna il suo valore a fine chiamata;
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    106
    Grazie per l'aiuto ,ma alla fine ci sono arrivato da solo..

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 © 2025 vBulletin Solutions, Inc. All rights reserved.