Алгоритмы и структуры данных на С++. Аксёнова Е.А - 48 стр.

UptoLike

48 Глава 4. Нелинейные структуры данных
// Нерекурсивная реализация обхода в обратном порядке
template <class DataT>void tree<DataT>::btree2(tree<DataT> *t)
{
stack <tree<DataT>*> x(100);
tree<DataT> *p;
p=t;
m: while(p!=NULL)
{
x.push(p);
p=p->llink;
}
if(!x.empty()) // если стек непуст
{
p=x.pop(); // выталкиваем p
cout<<p->info;
p=p->rlink;
goto m;
}
}
// Нерекурсивная реализация обхода в прямом порядке
template<class DataT>void tree<DataT>::btree3(tree<DataT> *t)
{
stack<tree<DataT>*> s(100);
tree<DataT> *p;
p=t;
s.push(p);
while(!s.empty())
{
p=s.pop();
cout<<p->info;
cout<<"\n";
if (p->rlink!=NULL)
s.push(p->rlink);
if (p->llink!=NULL)
s.push(p->llink);
}
48                       Глава 4. Нелинейные структуры данных



// Нерекурсивная реализация обхода в обратном порядке
template void tree::btree2(tree *t)
 {
   stack *> x(100);
   tree *p;
   p=t;
   m: while(p!=NULL)
        {
           x.push(p);
           p=p->llink;
        }

      if(!x.empty())      // если стек непуст
        {
           p=x.pop();     // выталкиваем p
           cout<info;
           p=p->rlink;
           goto m;
        }
 }

// Нерекурсивная реализация обхода в прямом порядке
templatevoid tree::btree3(tree *t)
 {
    stack*> s(100);
    tree *p;
    p=t;
    s.push(p);
    while(!s.empty())
       {
         p=s.pop();
         cout<info;
         cout<<"\n";
         if (p->rlink!=NULL)
                      s.push(p->rlink);
         if (p->llink!=NULL)
                      s.push(p->llink);
       }