Método de recorrido de árbol binario

referencia

  1. "Estructura de datos de Dahua"
  2. Esta nota es solo para registros de aprendizaje

1. Recorrido de pedidos por adelantado

Regla: siga la forma de acceder a la raíz primero, luego al subárbol izquierdo y finalmente al subárbol derecho (raíz-> izquierda-> derecha)
Inserte la descripción de la imagen aquí

// 前序遍历
void PreOrderTraverse(BiTree T)
{
    
    
	if(T==NULL)
		return ;
	printf("%c",T->data); // 显示结点数据,也可以是其他操作
	PreOrderTraverse(T->lchild);
	PreOrderTraverse(T->rchild); 
} 

Secuencia de acceso: ABDGHCEIF

Recorrido en orden

Regla: visite primero el subárbol izquierdo, luego el nodo raíz (se refiere al nodo raíz del subárbol actual, no al nodo raíz de todo el árbol ) y finalmente el subárbol derecho (izquierda-> raíz-> derecha)

Como se muestra en la figura, en el subárbol marcado por el cuadro amarillo, D es el nodo raíz del subárbol
Inserte la descripción de la imagen aquí

// 中序遍历 
void InOrderTraverse(BiTree T)
{
    
    
	if(T==NULL)
		return ;
	InOrderTraverse(T->lchild);
	printf("%c",T->data);
	InOrderTraverse(T->rchild);
} 

Secuencia de acceso: GDHBAEICF

Travesía posterior

Regla: Siga el orden del subárbol izquierdo primero, luego el subárbol derecho y el último nodo raíz (sigue siendo el nodo raíz del subárbol actual) (izquierda-> derecha-> raíz)
Inserte la descripción de la imagen aquí

// 后序遍历
void PostOrderTraverse(BiTree T)
{
    
    
	if(T==NULL)
		return ;
	PostOrderTraverse(T->lchild);
	PostOrderTraverse(T->rchild);
	printf("%c",T->data);
} 

Secuencia de acceso: GHDBIEFCA

De hecho, el llamado pre, medio y post orden se refiere al orden en el que se visitan las raíces. Como en el orden anterior, primero se visita la raíz y, en el orden medio, se visita la raíz en segundo lugar.

Cruce de secuencia

El recorrido de la secuencia de capas comienza desde el nodo de seguimiento, capa por capa, y escanea de izquierda a derecha para cada capa.
Inserte la descripción de la imagen aquí

Secuencia de acceso: ABCDEFGHL

void LevelOrder(BiTree b)
{
    
     
	InitQueue(Q); 
	BiTree p; 
	EnQueue(Q,b); //根结点进队 
	while(IsEmpty(Q))
	{
    
               
	//队列不空循环 
	DeQueue(Q,p) 
	//队头元素出队 
	printf(%c”,p->data); 
	if(p->lchild!=NULL) 
	EnQueue(Q,p->lchild); 
	if(p->rchild!=NULL) 
	EnQueue(Q,p->rchild); 
	} 
}

**Nota

  1. El recorrido de la secuencia de capas es muy similar al recorrido del gráfico en amplitud primero en la idea algorítmica. **

Supongo que te gusta

Origin blog.csdn.net/qq_34902437/article/details/94012432
Recomendado
Clasificación