Red de conocimiento informático - Aprendizaje de programación - Diseñar un algoritmo para obtener la estructura de lista binaria enlazada de un árbol binario completo a partir de esta matriz. escrito en c++

Diseñar un algoritmo para obtener la estructura de lista binaria enlazada de un árbol binario completo a partir de esta matriz. escrito en c++

El código del programa es el siguiente:

#include

#include

#define MAX 100

usando el espacio de nombres std;

typedef char ElemType;

typedef struct node

{

datos ElemType ; // Campo de datos

struct node *left; //Puntero secundario izquierdo

struct node *right; //Puntero secundario derecho

}.

BTNode;

//Inicializa la matriz de nodos de la lista binaria enlazada

void InitNodes(BTNode *nodes[], valores ElemType[], int size)

{

int i;

for(i=0; i

{

nodos[i] = nuevo BTNode( );

nodos[i]->datos = valores[i];

}

}

//MidOrder recorrido del árbol binario

void MidOrderTravel(BTNode *root)

{

if(root != NULL)

{

MidOrderTravel (raíz->izquierda);

cout<datos<<" ";

MidOrderTravel (raíz->derecha);

}

}

// Basado en la estructura de almacenamiento secuencial del árbol binario, genere una estructura de lista binaria vinculada para el árbol binario

BTNode *CreateBinaryTree(BTNode *nodes[] , int tamaño)

{

BTNode * root;

int i;

if (tamaño < 1)

return NULL;

for(i=0; i< tamaño; i++)

{

si (2*i+1 >= tamaño )

nodos[ i]-> left = NULL;

else if(nodos[2*i+1]->datos = = ' ')

nodos[i]->left = NULL;

else

nodos[i]->left = nodos[2 *i+ 1];

if(2*i+2 >= tamaño)

nodos[i]->right = NULL;

si no(nodos[ 2*i+2]->datos == ' ')

nodos[i]->right = NULL;

else

nodos[i] ->derecha = nodos[2* i+2];

}

raíz = nodos[0];

devolver raíz;

}

void main()

{

Valores ElemType[] = {'A','B','C','D ','E','F' ,'G'};

//Valores ElemType[] = {'A','B','C',','D','E '};

BTNode *raíz;<

BTNode *nodos[MAX];

int tamaño = 7;

InitNodes( nodos, valores, tamaño);

p>

root = CreateBinaryTree(nodos, tamaño);

cout<< "Secuencia transversal de orden medio:";

Orden media

Travel(root);

cout<< end;

}

Un árbol binario completo es una estructura de datos eficiente. Un árbol binario completo se deriva de un. árbol binario completo. Un árbol binario de profundidad K y n nodos se dice que es un árbol binario de profundidad K si y sólo si cada nodo de un árbol binario de profundidad K corresponde a un nodo numerado del 1 al n en un árbol binario de profundidad K. es un árbol binario completo.

Si como máximo el grado de los nodos en los dos niveles inferiores es menor que 2, y los nodos en la parte inferior están concentrados en algunas posiciones en el lado izquierdo del nivel y algunos nodos en el derecho Si faltan lados del nivel en el último nivel del nivel, entonces este árbol binario se convierte en un árbol binario completo.

Extendido

La idea de juzgar si un árbol es un árbol binario completo:

1. Si el árbol está vacío, aparece un mensaje de error. se devolverá directamente

2. Si el árbol no está vacío: realice un recorrido jerárquico del árbol binario

3. , abra el nodo y coloque sus nodos secundarios izquierdo y derecho en la cola;

4. Si el nodo secundario izquierdo de un nodo está vacío y el nodo secundario derecho no está vacío, el árbol no debe ser un árbol binario completo;

5. El nodo secundario ni el nodo secundario derecho están vacíos; o tanto el nodo secundario izquierdo como el nodo secundario derecho están vacíos; de lo contrario, este árbol solo puede ser un árbol binario completo; no Un árbol binario completo.

Enciclopedia Baidu - Árbol binario completo

Enciclopedia Baidu - Lista enlazada