[cdev] (без темы)
rg-400
rg-400 на list.ru
Вс Окт 30 18:06:24 MSK 2011
tree
*apply_in_order (tree *root, void (*fn) (tree *root, void *), void *arg)
{
if (root == NULL)
return root;
apply_in_order (root->left, fn, arg);
fn(root, arg);
apply_in_order (root->right, fn, arg);
fn(root, arg);
}
Здесь один fn явно лишний.
**
Порядок зависит от положения fn:
Для алгоритма обхода дерева в прямом порядке ( посещаем корень, потом
левое поддерево и затем правое поддерево)
if (root == NULL)
return root;
fn(root, arg);
apply_in_order (root->left, fn, arg);
apply_in_order (root->right, fn, arg);
**Для алгоритма обхода дерева в обратном порядке ( посещаем левое
поддерево, потом правое оддерево и затем корень)
if (root == NULL)
return root;
apply_in_order (root->left, fn, arg);
apply_in_order (root->right, fn, arg);
fn(root, arg);
**Для алгоритма обхода дерева в внутреннем порядке ( посещаем левое
поддерево, потом корень и затем правое поддерево)
if (root == NULL)
return root;
apply_in_order (root->left, fn, arg);
fn(root, arg);
apply_in_order (root->right, fn, arg);
Есть еще варианты с порядком вызова apply_in_order для правого и левого
поддеревьев.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://amplab.syktsu.ru/pipermail/cdev/attachments/20111030/c6a51d0f/attachment.htm>
Подробная информация о списке рассылки cdev