[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