c explanation of preorder binary tree traversal
Okay guys, I would like to know the following comments I made in this code. Thank you,

    void visit(tree_t *t){
        printf("%c ", t->e + 'A'); // why t->e + 'A', and not just t->e?
    }
    
    void tree_preorder(tree_t *t, void (*visit)(tree_t *)){ // i just don't know the parameter void (*visit)(tree_t *). what exactly is (*visit)(tree_t *)?
        if (!t) return; // what's the condition (!t)?
        visit(t);
        tree_preorder(t->l, visit);
        tree_preorder(t->r, visit);
    }
c explanation of preorder binary tree traversal
===

Okay guys, I would like to know the following comments I made in this code. Thank you,

    void visit(tree_t *t){
        printf("%c ", t->e + 'A'); // why t->e + 'A', and not just t->e?
    }
    
    void tree_preorder(tree_t *t, void (*visit)(tree_t *)){ // i just don't know the parameter void (*visit)(tree_t *). what exactly is (*visit)(tree_t *)?
        if (!t) return; // what's the condition (!t)?
        visit(t);
        tree_preorder(t->l, visit);
        tree_preorder(t->r, visit);
    }