<!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->left, fn, arg);<br>
fn(root, arg);<br>
apply_in_order (root->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->left, fn, arg);<br>
apply_in_order (root->right, fn, arg);<br>
<br>
<br>
<strong></strong>Для алгоритма обхода дерева в обратном порядке (
посещаем левое поддерево, потом правое оддерево и затем корень)<br>
<br>
if (root == NULL)<br>
return root;<br>
apply_in_order (root->left, fn, arg);<br>
apply_in_order (root->right, fn, arg);<br>
fn(root, arg);<br>
<br>
<strong></strong>Для алгоритма обхода дерева в внутреннем порядке (
посещаем левое поддерево, потом корень и затем правое поддерево)<br>
if (root == NULL)<br>
return root;<br>
apply_in_order (root->left, fn, arg);<br>
fn(root, arg);<br>
apply_in_order (root->right, fn, arg);<br>
<br>
Есть еще варианты с порядком вызова apply_in_order для правого и
левого поддеревьев.<br>
<br>
</body>
</html>