All’interno del programma sottostante viene proposta la costruzione di un albero binario a partire da vettore di stringhe.

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

#define W 10

struct tree2 {
  char value[W];
  struct tree2 *l, *r;  // figlio destro e sinistro
};

typedef struct tree2 tree2;

void print_v(char *v[], int n);
void print_t(tree2 *t, int space);
tree2 *vet2tree2(char *v[], int n, tree2 *t);

int main(void) {
  char *v[6];
  int i, n=6;
  tree2 *t=NULL;

  for(i=0; i<n; i++) {
    v[i] = calloc(W, sizeof(char));
    if(v[i] == NULL) {
      printf("Allocazione 2.%d fallita", i);
      exit(1);
    }
  }

  strcpy(v[0], "la");
  strcpy(v[1], "pecora");
  strcpy(v[2], "e");
  strcpy(v[3], "un");
  strcpy(v[4], "animale");
  strcpy(v[5], "feroce");

  t = vet2tree2(v, n, t);

  print_v(v, n);
  print_t(t, 0);
  
  return 1;
}

void print_v(char *v[], int n) {
  int i;

  for(i=0; i<n; i++) {
    printf("%s ", v[i]);
  }

  printf("\n\n");
}

void print_t(tree2 *t, int space) {
  int i;

  i=0;
  while(space>i) {
    printf(" ");
    i++;
  }

  if(t == NULL) {
    printf("- \n");
  }
  else {
    printf("- %s\n", t->value);

    if(t->l!=NULL || t->r!=NULL) {
      space++;
      print_t(t->r, space);
      print_t(t->l, space);
    }
  }
}

tree2 *vet2tree2(char *v[], int n, tree2 *t) {
  tree2 *current;
  int i, stop;

  i=0;
  while(i<n) {
    if(i==0) {
      t = malloc(sizeof(tree2));
      if(t == NULL) {
        printf("Allocazione fallita");
        exit(1);
      }

      strcpy(t->value, v[0]);
      t->l = NULL;
      t->r = NULL;
    }
    else {
      current = t;
      stop = 0;
      do {
        if(strcmp(v[i], current->value)>=0) {                         // entro nel sottoalbero di destra
          if(current->r == NULL) {                                    // ho raggiunto una foglia
            current->r = realloc(current->r, sizeof(tree2)*(n+1));    // alloco il nuovo nodo
            if(t == NULL) {
              printf("Allocazione fallita");
              exit(1);
            }

            stop = 1;
          }

          current = current->r;
        }
        else {                                                        // entro nel sottoalbero di sinistra
          if(current->l == NULL) {                                    // ho raggiunto una foglia
            current->l = realloc(current->l, sizeof(tree2)*(n+1));    // alloco il nuovo nodo
            if(t == NULL) {
              printf("Allocazione fallita");
              exit(1);
            }

            stop = 1;
          }

          current = current->l;
        }
      }while(stop != 1);

      strcpy(current->value, v[i]);
      current->l = NULL;
      current->r = NULL;
    }

    i++;
  }

  return t;	
}

Per maggiori informazioni circa la sintassi del linguaggio si faccia riferimento alla guida al Linguaggio C.