<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#ffffff">
    <br>
    tree <br>
    *apply_in_order (tree *root, void (*fn) (tree *root, void *), void
    *arg)<br>
    {<br>
        <br>
        if (root == NULL)<br>
            return root;    <br>
        apply_in_order (root-&gt;left, fn, arg);<br>
        fn(root, arg);<br>
        apply_in_order (root-&gt;right, fn, arg);<br>
        fn(root, arg);<br>
    }<br>
    <br>
    Здесь один fn явно лишний.<br>
    <strong></strong><br>
    Порядок зависит от положения fn:<br>
    <br>
    Для алгоритма обхода дерева в прямом порядке ( посещаем корень,
    потом левое поддерево и затем правое поддерево)<br>
    <br>
    if (root == NULL)<br>
            return root;<br>
    fn(root, arg);<br>
    apply_in_order (root-&gt;left, fn, arg);<br>
    apply_in_order (root-&gt;right, fn, arg);<br>
    <br>
    <br>
    <strong></strong>Для алгоритма обхода дерева в обратном порядке (
    посещаем левое поддерево, потом правое оддерево и затем корень)<br>
    <br>
    if (root == NULL)<br>
            return root;<br>
    apply_in_order (root-&gt;left, fn, arg);<br>
    apply_in_order (root-&gt;right, fn, arg);<br>
    fn(root, arg);<br>
    <br>
    <strong></strong>Для алгоритма обхода дерева в внутреннем порядке (
    посещаем левое поддерево, потом корень и затем правое поддерево)<br>
    if (root == NULL)<br>
            return root;<br>
    apply_in_order (root-&gt;left, fn, arg);<br>
    fn(root, arg);<br>
    apply_in_order (root-&gt;right, fn, arg);<br>
    <br>
    Есть еще варианты с порядком вызова apply_in_order  для правого и
    левого поддеревьев.<br>
    <br>
  </body>
</html>