Red de conocimiento informático - Conocimiento del nombre de dominio - Urgente, tres códigos de algoritmo transversal para recorrido de árbol

Urgente, tres códigos de algoritmo transversal para recorrido de árbol

Esta publicación proporciona tres algoritmos no recursivos para el recorrido del árbol binario: primario, intermedio y final. Estos tres algoritmos pueden considerarse algoritmos estándar y pueden usarse directamente para responder preguntas del examen.

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