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

    [C] Calcolo profondità BST

    Ho implementanto la funzione in oggetto nel seguente modo:
    codice:
    //*level_count
    int level_count(t_tree tree)
    {
        if(tree->right==NULL && tree->left==NULL)
            return 1;
        else
        {
            if(tree->right!=NULL)
            {
                return 1+ level_count(tree->right);
            }
            else
            {
                if(tree->left!=NULL)
                {
                    return 1+ level_count(tree->left);
                }
                else
                {
                    int level_right=level_count(tree->right);
                    int level_left=level_count(tree->left);
                    if(level_right>level_left)
                        return 1+level_right;
                    else
                        return 1+level_left;
                    
                }
            }
        }
    }
    ...però anzichè restituirmi la profondità mi restituisce il numero di valori inseriti. Ho controllato più volte e a livello logico mi sembra corretta, ma se inserisco i valori
    13
    18
    8
    9
    14
    6
    che dovrebbero essere organizzati in un albero con profondità 3 (radice compresa) la funzione mi restituisce 6.
    La funzione di inserimento nell'albero è la seguente:
    codice:
    //*tree_insert
    t_tree tree_insert(t_tree tree,t_info info)
    {
        if(tree==NULL)
        {
            t_node_t* new_node;
            new_node=node_t_create(info);
            return new_node;
        }
        else
        {
            if(info.n>tree->info.n)
            {   
                tree->right=tree_insert(tree->right,info);
                return tree;
            }
            else
            {
                tree->left=tree_insert(tree->left,info);
                return tree;
            }
        }
    }
    Qualcuno mi da qualchd hint per trovare l'errore?

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    codice:
    int profondita(t_tree t) {
      if(t == NULL)
        return 0;
      return (1 + max(profondita(t->left), profondita(t->right)));
    }
    
    int max(int a, int b) {
      return ((a > b) ? a : b);
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    return ((a > b) ? a : b);
    [/CODE]
    Questa cosa non l'ho mai vista! Grazie

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    È uguale a:
    codice:
    if(a>b)
      return a;
    else
      return b;
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Sì, l'avevo capito Era un'espressione di meraviglia, o qualcosa del genere

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.