|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Andrew Ezhguroff 2:5020/400 08 Apr 2002 14:42:28 To : Alexey Zhivotov Subject : Re: Обход дерева каталогов без рекурсии -------------------------------------------------------------------------------- Привет! "Alexey Zhivotov" <Alexey.Zhivotov@p9.f16.n5007.z2.fidonet.org> сообщил(а): AE>> Берешь рекурсивный алгоритм и меняешь рекурсию на стек: AE>> вызов подпрограммы - занесение в стек AE>> возврат из подпрограммы - извлечение из стека AZ> Да про это я знаю, мне надо именно *пример*. Hапример что-то вроде этого (печатает целочисленные значения, хранящееся в узлах дерева). Обход дерева осуществляется функцией Nodes, работа программы не проверялась. #include <stdio.h> #include <stdlib.h> struct _Tree{ struct _Tree *Left, *Right; int Val; }; struct _Stack{ struct _Tree *Node; struct _Stack *Ptr; } *Stack = 0; void Sack_Up(struct _Tree *Data){ struct _Stack *Temp=malloc(sizeof(struct _Stack)); Temp->Node=Data; Temp->Ptr =Stack; Stack=Temp; } struct _Tree *Stack_Down(void){ if(Stack){ struct _Stack *Temp=Stack; struct _Tree *Data=Temp->Node; Stack=Temp->Ptr; free(Temp); return Data; }else{ return 0; } } void Nodes(struct _Tree *Tree){ while(Tree){ if(Tree->Right)Stack_Up(Tree->Right); printf("%d\n", Tree->Val); Tree=Tree->Left? Tree->Left: Stack_Down(); } } С уважением, Андрей. -- Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5 * Origin: Talk.Mail.Ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/648825e6a090.html, оценка из 5, голосов 10
|