Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] - Suggerimento Stampa Albero binario

    Salve a tutti, qualcuno mi sa dare un suggerimento su come posso effettuare la stampa di un albero binario in modo che si capisca che è un albero, ossia fare una stampa che visualizzi a video la struttura albero? i campi dell'albero sono interi, ma ciò è indifferente.

    Inizialmente avevo pensato ad una GotoXY()... ma non credo che vada bene...

    Chiedo aiuto!

  2. #2

    Uhm

    ciao Vincent,

    anche io un po di tempo fa stavo esaminando questo problema, poi pero per motivi di tempo ho lasciato stare. Penso pero che ci sia bisogno di visitare l albero in maniera ricorsiva e fare la stampa per ogni livello visitato.
    Per maggiori dettagli magari ci sentiamo con i MP.

    Saluti!

  3. #3
    Codice PHP:
    void StampaAlbero
    (
      
    TREE *Albero 
    )
    {
      
      if( 
    Albero != NULL /* Se esiste almeno un Nodo */
      
    {
          
    printf("( %d "Albero->Padre+1); /* Stampo la radice ( Padre ) */
          
    StampaAlberoAlbero->FiglioSx ); /* passo al Figlio Sinistro */
          
    StampaAlberoAlbero->FiglioDx ); /* passo al Figlio Destro */
          
    printf(" )");
      }
      else 
    /* Altrimenti stampo (N) ad indicare il nodo vuoto ( NULL ) */
         
    printf("(N)");
    }  
    /* Fine StampaAlbero */ 
    il problema sta nel come far capire alla ricorsione le coordinate giuste...

  4. #4
    la stampa di un albero binario è ricorsiva, per esempio
    // stampa in ordine dell'albero p
    void TBTREEBASE::Print(TNode *p)
    {
    if (p) {
    Print(p->Left);
    // cout << p->key << endl;
    Print (p->Right);
    }
    }

    void TBTREEBASE::Print()
    {
    Print(root);
    }

  5. #5
    Originariamente inviato da mondobimbi
    la stampa di un albero binario è ricorsiva, per esempio
    io vorrei fare una stampa che faccia capire la struttura dell'albero, cioè chi vede la stampa deve poter capire che quello che c'è video è un albero... tipo albero genialogico

  6. #6
    Codice PHP:
    void gotoxy(int xint y)
    {
      
    HANDLE hConsoleOutput;
      
    COORD dwCursorPosition;
      
      
    dwCursorPosition.x;
      
    dwCursorPosition.y;
      
    hConsoleOutput GetStdHandle(STD_OUTPUT_HANDLE);
      
    SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
    }

    void StampaAlbero
    (
      
    Nodepointer Albero,
      
    int *Partenza,
      
    int *Fine
    )
    {
      

      
    int x ceil(*X/2);
      
    int y = *Y+2;
      
    gotoxy1050 );
      
    printf("x=%d, y=%d"x);
      if( 
    Albero != NULL /* Se esiste almeno un Nodo */
      
    {
          
    gotoxyxy  );
          
          
    printf(" %d "Albero->valore); /* Stampo la radice ( Padre ) */
          
    getch();      

          
    StampaAlberoAlbero->son_sx, &x, &); /* passo al Figlio Sinistro */   
          
    StampaAlberoAlbero->son_dx, &X, &); /* passo al Figlio Destro */   
      
    }
    }  
    /* Fine StampaAlbero */ 
    per l'albero:

    ( 1 ( 2 ( 4 ( 8 ( 9 (N)(N) )( 10 (N)(N) ) )(N) )( 5 (N)(N) ) )( 3 ( 6 (N)(N) )( 7 (N)(N) ) ) )

    stampa correttamente fino a 9, ma poi ovviamente si perde gli indici di posizione X e Y...
    percè ritorna all'istanza precedente cioè a 8 e non aggiornando gli indici, sovrascrive i valori...
    se ti va di dare un'occhiata, magari ti mando proprio il file .c così è più semplice anche per te.

    Si tratta solo di come poter controllare gli indici di posizione alla fine della ricorsione sinistra e destra...poi il dilemma è sciolto

    GRAZIE!

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.