Visualizzazione dei risultati da 1 a 10 su 15

Visualizzazione discussione

  1. #6
    Questo è il codice completo:

    codice:
     
    #include <stdio.h>
    #include <stdlib.h>
    
    
    typedef int element;
    typedef struct tree_element{
        element value;
        struct tree_element *left, *right;
    }node;
    typedef node *tree;
    typedef int boolean;
    
    boolean emptyt(tree t){
        return (t == NULL);
    }
    
    tree emptytree(){
        return NULL;
    }
    
    element root(tree t){
        if (emptyt(t))
            abort();
        else
            return t->value;
    }
    
    
    
    tree left(tree t){
        if (emptyt(t))
            return NULL;
        else
            return t->left;
    }
    
    
    tree right(tree t){
        if (emptyt(t))
            return NULL;
        else
            return t->right;
    }
    
    tree consTree(element e, tree l, tree r){
        tree t;
        t = (node *)malloc(sizeof(node));
        t->value = e;
        t->left = l;
        t->right = r;
        return t;
    }
    
    tree insertBinOrd(element e, tree t){
        tree l = t;
        if (emptyt(t))
            return consTree(e, emptytree(), emptytree());
        while (!emptyt(t)) {
            if (e <= root(t)){
                if (emptyt(left(t))){
                    t->left = consTree(e, emptytree(), emptytree());
                    t = left(t);
                }
                t = left(t);
            }
            else {
                if (emptyt(right(t))){
                    t->right = consTree(e, emptytree(), emptytree());
                    t = right(t);
                }
                t = right(t);
            }
        }
        return l;
    }
    
    int uguali(tree t1, tree t2) {
    tree l = t1, s = t2;
    /* caso base: entrambi gli alberi vuoti */
    if ((emptyt(l)) && (emptyt(s))) {
    printf("\n\nEntrambi vuoti\n");
    return 0;
    }
    /* caso base: un albero vuoto, un albero no */
    if ((emptyt(l)) || (emptyt(s))) {
    printf("\n Uno dei due alberi e' vuoto");
    return 0;
    }
    /* i due nodi in esame devono contenere lo
    stesso valore e i due sottoalberi sx e dx
    devono essere uguali (ricorsivamente) */
    return (l->value == s->value    && uguali(l->left, s->left) && uguali(l->right, s->right));
    }
    
    
    
    
    
    int main(){
    tree t = emptytree(), r = emptytree();
    element el;
    FILE *f; 
    int ugualiInt = 0;
    f = fopen("valori.txt", "rt");    if (f == NULL) {
    printf("Errore Apertura file");
    exit(1);
    }
    while (fscanf(f, "%d", &el)>0) {
    t = insertBinOrd(el, t); 
    //Creo i due alberi esattamente identici(ho controllato li riempisse correttamente)
    r = insertBinOrd(el, r);    
    }
    
    ugualiInt = uguali(t, r);    printf("\n\n\tSe esce 1 va bene: %d", ugualiInt);
    getchar();
    }  
    
    Ultima modifica di meme1006; 13-09-2015 a 12:15

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.