Le parcours en profondeur est très facile à programmer dans sa
version récursive ; s'il s'agit simplement d'imprimer les valeurs des
n 
 uds, on écrira :
void depth_first_rec(tree_cell *p) {
    if (!is_empty_cell(p)) {
      printf("%d\n", p->label);
      depth_first_rec(p->left);
      depth_first_rec(p->right);
    }
}
Pour  une utilisation plus générale  du  parcours en profondeur, on peut
passer une procédure en  paramètre, qui  opère sur  la valeur de  chaque
n 
 ud :
void depth_first_rec(tree_cell *p, void f(cell_data)) {
    if (!is_empty_cell(p)) {
      f(p->label);
      depth_first_rec(p->left, f);
      depth_first_rec(p->right, f);
    }
}
Il s'agit  en fait de l'ordre préfixe  de ce parcours,  où chaque
n 
 ud  de l'arbre  est  traité  avant ses  descendants.
L'application de cet ordre   à l'arbre de la  figure 
  donne
comme résultat  : 1,  2,  4, 8, 5, 3,   6, 9, 10, 12, 13,   7, 11.  Pour
obtenir l'ordre infixe, où  chaque n 
 ud est traité entre  ses
descendants  gauches et     ses    descendants droits,    et     l'ordre
postfixe,  où    chaque  n 
 ud  est   traité après    tous ses
descendants, il suffit de déplacer l'appel à la fonction f ; on
obtient
    depth_first_rec(p->left, f);
    f(p->label);
    depth_first_rec(p->right, f);
pour  l'ordre infixe,  qui  donne  comme   résultat  sur l'arbre  de  la
figure 
 4, 8, 2, 5, 1, 9, 6, 12, 10, 13, 3, 11, 7, ainsi que
    depth_first_rec(p->left, f);
    depth_first_rec(p->right, f);
    f(p->label);
pour l'ordre postfixe, qui donne comme résultat 8, 4, 5, 2, 9, 12, 13, 10, 6, 11, 7, 3, 1.