Urgente, tres códigos de algoritmo transversal para recorrido de árbol
1. Algoritmo no recursivo transversal de pedido previo
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;
void PreOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t
mientras (p. =null|| !=null || !StackEmpty(s))
{
while (p!=null) // atraviesa el subárbol izquierdo
{
visita( p-gt; datos);
push(s, p);
p=p-gt;
}/finalizar
if (!StackEmpty(s)) // Atraviesa el subárbol derecho en línea mientras estás en el siguiente bucle
{
p=pop(s);
p>p=p-gt;rchild;
}/endif
}/end while
}// PreOrderUnrec
2. Algoritmo no recursivo para recorrido intermedio
#define maxsize 100
typedef struct
{
Bitree Elem[ maxsize] ;
int top;
}SqStack;
void InOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;
mientras (p. =null|| !=null || !StackEmpty ( s) )
{
while (p!=null) //atraviesa el subárbol izquierdo
{
push(s, p) ;
p=p-gt;lchild;
}//end while
if (! StackEmpty(s))
{
p=pop(s);
visite(p-gt;data); //visita el nodo raíz
p=p-gt;rchild; //recorrido del subárbol derecho por el siguiente bucle
}/endif
}/end while
} //InOrderUnrec
3. Algoritmo no recursivo de recorrido posterior al pedido
#define maxsize 100
typedef enum{L, R} tagtype;
typedef struct
{
Bitree ptr;
etiqueta tipo
}stacknode;
struct
{
stacknode Elem[maxsize];
int top
}SqStack
void; PostOrderUnrec(Bitree t)
{
SqStack s;
stacknode x
StackInit(s); p> p=t;
do
{
while (p!=null) //Atraviesa el subárbol izquierdo
{
x.ptr = p;
x.tag = L; // Marcado como el subárbol izquierdo
push(s, x < /p); >
p=p-gt;lchild;
}
while (!StackEmpty(s) amp; s.Elem[s.top].tag ==R)
{
x = pop(s);
p = x.ptr
visita(p- gt; datos) ; //etiqueta R significa que se accede al subárbol derecho, por lo que se accede al nodo raíz
}
if (!StackEmpty(s))
{
s.Elem[s.top].tag =R; // Recorre el subárbol derecho
p = s.Elem[s.top].ptr-gt ;rchild;
}
}mientras (!StackEmpty(s));
}/PostOrderUnrec